diff --git a/.github/ISSUE_TEMPLATE/help.md b/.github/ISSUE_TEMPLATE/help.md
new file mode 100644
index 0000000..417d0ac
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/help.md
@@ -0,0 +1,29 @@
+---
+name: Help ❓
+about: Encountered a problem with the tool?
+---
+
+<!-- Don't write inside the arrows as they will be hidden when you post your issue.
+
+If you are in need of help, please follow the following steps:
+
+1.  Fill out the template.
+      This will help us understand what problem you've encountered and help us
+      find a solution.
+
+2.  Delete this line and all above lines before posting your issue! -->
+
+## Information
+<!-- Head to https://www.whatismybrowser.com/ and copy/paste the
+  'Send this link to Tech Support to share your system info:' link here -->
+
+## Help request
+
+### Problem
+<!-- What problem did you encounter? -->
+
+### What I have tried
+<!-- What have you tried so far? -->
+
+### Screenshots
+<!-- If relevant, include any screenshots here. -->
diff --git a/.github/ISSUE_TEMPLATE/report-a-bug.md b/.github/ISSUE_TEMPLATE/report-a-bug.md
new file mode 100644
index 0000000..747d227
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/report-a-bug.md
@@ -0,0 +1,36 @@
+---
+name: Report a bug 🐛
+about: Report a bug with the tool. Only use this if you're 100% sure there's something wrong, otherwise, try "Help".
+---
+
+<!-- Don't put anything inside this block, as it won't be included in the issue.
+
+If you are reporting a bug, please follow the following steps:
+
+1.  Fill out the template in full.
+      This will help us understand the situation in which the bug occurred.
+
+2.  If you are reporting a visual bug, please include screenshots of the
+     tool to help us diagnose the problem.
+
+3.  Make sure not to write between the arrows, as anything there will be hidden.
+
+4.  Delete this line and all above lines before posting your issue! -->
+
+## Information
+<!-- Head to https://www.whatismybrowser.com/ and copy/paste the
+  'Send this link to Tech Support to share your system info:' link here -->
+
+## Details
+
+### Description 
+<!-- Replace this with a brief summary of the bug. -->
+
+### Steps to reproduce
+<!-- Replace this with exactly what you did to cause the bug. -->
+
+### Expected behavior
+<!-- Replace this with what you expected to happen. -->
+
+### Screenshots
+<!-- Replace this with screenshots, if necessary. -->
diff --git a/.github/ISSUE_TEMPLATE/request-a-feature.md b/.github/ISSUE_TEMPLATE/request-a-feature.md
new file mode 100644
index 0000000..8ba9eb5
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/request-a-feature.md
@@ -0,0 +1,38 @@
+---
+name: Request a feature 🆕
+about: Suggest a new feature that you would like in the tool!
+---
+
+<!-- Fill out the template. Don't write inside the arrows as they will be hidden
+when you post your issue.
+
+If you have a feature suggestion for the tool, read through the following steps:
+
+1.  Fill out the template.
+      This will help us understand what you're requesting and why you want us
+      to add it.
+
+2.  Keep it simple.
+      Make sure it's easy to understand what you're requesting. A good way is
+      to keep it to one request per GitHub issue, as we can then easily track
+      feature requests.
+
+3.  Check whether it has already been asked or added.
+      You can search the exiting GitHub issues to see if your feature has
+      already been requested.
+
+4.  Ask yourself: "Does this idea/feature belong as part of the tool?"
+      Whilst we'd love to be able to add every feature that every user wants,
+      we want to keep the site as small and as fast as possible by limiting how
+      much code we have. Make sure the feature you are requesting is something
+      that others will benefit from, not just you.
+
+5.  Delete this line and all above lines before posting your issue! -->
+
+## Feature request
+
+### Feature description
+<!-- What feature are you suggesting? -->
+
+### How the feature is useful
+<!-- How is the feature useful to users of the tool? -->
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..13d8689
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,16 @@
+## Type of Change
+<!-- What part of the source are you modifying? Remove the irrelevant options. -->
+
+- **Build Scripts:** <!-- Scripts relating to building, testing or CI -->
+- **Tool Source:** <!-- Which part of the tool source? Vue, JS, SCSS? -->
+- **Something else:** <!-- Say what it is, here! -->
+
+## What issue does this relate to?
+<!-- Use a GitHub keyword ('resolves #xx', 'fixes #xx', 'closes #xx') to automatically close the relevant issue. -->
+
+### What should this PR do?
+<!-- Write a quick bullet point summary of the changes this PR should be making. -->
+
+### What are the acceptance criteria?
+<!-- Write a list of what should reviewers be checking before they approve this PR. -->
+<!-- If there are UI changes, include before and after screenshots in a table for comparison. -->
diff --git a/.github/workflows/do-spaces-workflow.yml b/.github/workflows/do-spaces-workflow.yml
new file mode 100644
index 0000000..bf07c65
--- /dev/null
+++ b/.github/workflows/do-spaces-workflow.yml
@@ -0,0 +1,43 @@
+name: Test and Deploy to DigitalOcean Spaces
+
+on: push
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v1
+
+    - name: Read .nvmrc
+      run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)"
+      id: nvm
+
+    - name: Use Node.js (.nvmrc)
+      uses: actions/setup-node@v1
+      with:
+        node-version: "${{ steps.nvm.outputs.NVMRC }}"
+
+    - name: npm ci, test, and build
+      run: |
+        npm ci
+        npm test
+        npm run build
+      env:
+        DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
+
+    - name: Deploy commit to DigitalOcean Spaces
+      run: aws s3 sync ./dist s3://${{ secrets.SPACES_BUCKET }}/commits/available-images/${{ github.sha }} --endpoint=https://${{ secrets.SPACES_REGION }}.digitaloceanspaces.com --acl public-read --content-encoding utf8
+      env:
+        AWS_ACCESS_KEY_ID: ${{ secrets.SPACES_ACCESS_KEY_ID }}
+        AWS_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET_ACCESS_KEY }}
+        AWS_DEFAULT_REGION: ${{ secrets.SPACES_REGION }}
+
+    - name: Leave a comment
+      run: npm run deploy:spaces:comment
+      env:
+        REPO_NAME: ${{ github.repository }}
+        COMMIT_SHA: ${{ github.sha }}
+        GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        SPACES_REGION: ${{ secrets.SPACES_REGION }}
+        SPACES_BUCKET: ${{ secrets.SPACES_BUCKET }}
diff --git a/.github/workflows/gh-pages-workflow.yml b/.github/workflows/gh-pages-workflow.yml
new file mode 100644
index 0000000..789daac
--- /dev/null
+++ b/.github/workflows/gh-pages-workflow.yml
@@ -0,0 +1,38 @@
+name: Test and Deploy to GitHub Pages
+
+on:
+  push:
+    branches:
+      - master
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v1
+
+    - name: Read .nvmrc
+      run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)"
+      id: nvm
+
+    - name: Use Node.js (.nvmrc)
+      uses: actions/setup-node@v1
+      with:
+        node-version: "${{ steps.nvm.outputs.NVMRC }}"
+
+    - name: npm ci, test, and build
+      run: |
+        npm ci
+        npm test
+        npm run build
+      env:
+        DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
+
+    - name: Deploy master to GitHub Pages
+      uses: JamesIves/github-pages-deploy-action@2.0.0
+      env:
+        ACCESS_TOKEN: ${{ secrets.DEV_GITHUB_TOKEN }}
+        BASE_BRANCH: master
+        BRANCH: gh-pages
+        FOLDER: dist