From 202455fd2e8b5ae155e6186deb2a6d053339fd1d Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Thu, 11 Jan 2024 18:22:20 +1100 Subject: [PATCH] feat: Add docker image --- .gitea/workflows/build.yml | 41 +++++++++++ main.py | 42 +++++++++++ requirements.txt | 5 ++ server.py | 66 ++++++++++++++++++ .../.well-known}/wallets/HNS | 0 404.html => templates/404.html | 0 about.html => templates/about.html | 0 .../assets}/bootstrap/css/bootstrap.min.css | 0 .../assets}/bootstrap/js/bootstrap.min.js | 0 {assets => templates/assets}/css/404.css | 0 .../assets}/css/vanilla-zoom.min.css | 0 .../assets}/fonts/fa-brands-400.eot | Bin .../assets}/fonts/fa-brands-400.svg | 0 .../assets}/fonts/fa-brands-400.ttf | Bin .../assets}/fonts/fa-brands-400.woff | Bin .../assets}/fonts/fa-brands-400.woff2 | Bin .../assets}/fonts/fa-regular-400.eot | Bin .../assets}/fonts/fa-regular-400.svg | 0 .../assets}/fonts/fa-regular-400.ttf | Bin .../assets}/fonts/fa-regular-400.woff | Bin .../assets}/fonts/fa-regular-400.woff2 | Bin .../assets}/fonts/fa-solid-900.eot | Bin .../assets}/fonts/fa-solid-900.svg | 0 .../assets}/fonts/fa-solid-900.ttf | Bin .../assets}/fonts/fa-solid-900.woff | Bin .../assets}/fonts/fa-solid-900.woff2 | Bin .../assets}/fonts/fontawesome-all.min.css | 0 .../assets}/fonts/ionicons.eot | Bin .../assets}/fonts/ionicons.min.css | 0 .../assets}/fonts/ionicons.svg | 0 .../assets}/fonts/ionicons.ttf | Bin .../assets}/fonts/ionicons.woff | Bin {assets => templates/assets}/img/16.png | Bin {assets => templates/assets}/img/180.png | Bin {assets => templates/assets}/img/192.png | Bin {assets => templates/assets}/img/32.png | Bin {assets => templates/assets}/img/512.png | Bin .../assets}/img/HNSAUbanner.png | Bin .../assets}/img/Life cycle of a name.png | Bin .../assets}/img/avatars/avatar1.jpg | Bin .../assets}/img/avatars/avatar2.jpg | Bin .../assets}/img/avatars/avatar3.jpg | Bin {assets => templates/assets}/img/favicon.png | Bin .../assets}/img/favicon/16.png | Bin .../assets}/img/favicon/180.png | Bin .../assets}/img/favicon/192.png | Bin .../assets}/img/favicon/32.png | Bin .../assets}/img/favicon/512.png | Bin .../assets}/img/favicon/transparent.png | Bin {assets => templates/assets}/img/hns/16.png | Bin {assets => templates/assets}/img/hns/180.png | Bin {assets => templates/assets}/img/hns/192.png | Bin {assets => templates/assets}/img/hns/32.png | Bin {assets => templates/assets}/img/hns/512.png | Bin .../assets}/img/hnsaupromo.png | Bin .../assets}/img/links/NJW Icon 512.png | Bin .../assets}/img/links/impervious.svg | 0 .../assets}/img/scenery/Handshake.png | Bin .../assets}/img/scenery/beach1.jpg | Bin .../assets}/img/scenery/beach2.jpg | Bin .../assets}/img/scenery/image1.jpg | Bin .../assets}/img/scenery/image4.jpg | Bin .../assets}/img/scenery/image5.jpg | Bin .../assets}/img/scenery/image6.jpg | Bin .../assets}/img/scenery/surf.jpg | Bin .../assets}/img/tech/image4.jpg | Bin {assets => templates/assets}/img/wfavicon.png | Bin {assets => templates/assets}/js/404.js | 0 {assets => templates/assets}/js/test.js | 0 {assets => templates/assets}/js/theme.js | 0 .../assets}/js/vanilla-zoom.js | 0 contact.html => templates/contact.html | 0 faq.html => templates/faq.html | 0 handshake.js => templates/handshake.js | 0 https.js => templates/https.js | 0 index.html => templates/index.html | 0 links.html => templates/links.html | 0 manifest.json => templates/manifest.json | 0 redirect.js => templates/redirect.js | 0 uv.html => templates/uv.html | 0 80 files changed, 154 insertions(+) create mode 100644 .gitea/workflows/build.yml create mode 100644 main.py create mode 100644 requirements.txt create mode 100644 server.py rename {.well-known => templates/.well-known}/wallets/HNS (100%) rename 404.html => templates/404.html (100%) rename about.html => templates/about.html (100%) rename {assets => templates/assets}/bootstrap/css/bootstrap.min.css (100%) rename {assets => templates/assets}/bootstrap/js/bootstrap.min.js (100%) rename {assets => templates/assets}/css/404.css (100%) rename {assets => templates/assets}/css/vanilla-zoom.min.css (100%) rename {assets => templates/assets}/fonts/fa-brands-400.eot (100%) rename {assets => templates/assets}/fonts/fa-brands-400.svg (100%) rename {assets => templates/assets}/fonts/fa-brands-400.ttf (100%) rename {assets => templates/assets}/fonts/fa-brands-400.woff (100%) rename {assets => templates/assets}/fonts/fa-brands-400.woff2 (100%) rename {assets => templates/assets}/fonts/fa-regular-400.eot (100%) rename {assets => templates/assets}/fonts/fa-regular-400.svg (100%) rename {assets => templates/assets}/fonts/fa-regular-400.ttf (100%) rename {assets => templates/assets}/fonts/fa-regular-400.woff (100%) rename {assets => templates/assets}/fonts/fa-regular-400.woff2 (100%) rename {assets => templates/assets}/fonts/fa-solid-900.eot (100%) rename {assets => templates/assets}/fonts/fa-solid-900.svg (100%) rename {assets => templates/assets}/fonts/fa-solid-900.ttf (100%) rename {assets => templates/assets}/fonts/fa-solid-900.woff (100%) rename {assets => templates/assets}/fonts/fa-solid-900.woff2 (100%) rename {assets => templates/assets}/fonts/fontawesome-all.min.css (100%) rename {assets => templates/assets}/fonts/ionicons.eot (100%) rename {assets => templates/assets}/fonts/ionicons.min.css (100%) rename {assets => templates/assets}/fonts/ionicons.svg (100%) rename {assets => templates/assets}/fonts/ionicons.ttf (100%) rename {assets => templates/assets}/fonts/ionicons.woff (100%) rename {assets => templates/assets}/img/16.png (100%) rename {assets => templates/assets}/img/180.png (100%) rename {assets => templates/assets}/img/192.png (100%) rename {assets => templates/assets}/img/32.png (100%) rename {assets => templates/assets}/img/512.png (100%) rename {assets => templates/assets}/img/HNSAUbanner.png (100%) rename {assets => templates/assets}/img/Life cycle of a name.png (100%) rename {assets => templates/assets}/img/avatars/avatar1.jpg (100%) rename {assets => templates/assets}/img/avatars/avatar2.jpg (100%) rename {assets => templates/assets}/img/avatars/avatar3.jpg (100%) rename {assets => templates/assets}/img/favicon.png (100%) rename {assets => templates/assets}/img/favicon/16.png (100%) rename {assets => templates/assets}/img/favicon/180.png (100%) rename {assets => templates/assets}/img/favicon/192.png (100%) rename {assets => templates/assets}/img/favicon/32.png (100%) rename {assets => templates/assets}/img/favicon/512.png (100%) rename {assets => templates/assets}/img/favicon/transparent.png (100%) rename {assets => templates/assets}/img/hns/16.png (100%) rename {assets => templates/assets}/img/hns/180.png (100%) rename {assets => templates/assets}/img/hns/192.png (100%) rename {assets => templates/assets}/img/hns/32.png (100%) rename {assets => templates/assets}/img/hns/512.png (100%) rename {assets => templates/assets}/img/hnsaupromo.png (100%) rename {assets => templates/assets}/img/links/NJW Icon 512.png (100%) rename {assets => templates/assets}/img/links/impervious.svg (100%) rename {assets => templates/assets}/img/scenery/Handshake.png (100%) rename {assets => templates/assets}/img/scenery/beach1.jpg (100%) rename {assets => templates/assets}/img/scenery/beach2.jpg (100%) rename {assets => templates/assets}/img/scenery/image1.jpg (100%) rename {assets => templates/assets}/img/scenery/image4.jpg (100%) rename {assets => templates/assets}/img/scenery/image5.jpg (100%) rename {assets => templates/assets}/img/scenery/image6.jpg (100%) rename {assets => templates/assets}/img/scenery/surf.jpg (100%) rename {assets => templates/assets}/img/tech/image4.jpg (100%) rename {assets => templates/assets}/img/wfavicon.png (100%) rename {assets => templates/assets}/js/404.js (100%) rename {assets => templates/assets}/js/test.js (100%) rename {assets => templates/assets}/js/theme.js (100%) rename {assets => templates/assets}/js/vanilla-zoom.js (100%) rename contact.html => templates/contact.html (100%) rename faq.html => templates/faq.html (100%) rename handshake.js => templates/handshake.js (100%) rename https.js => templates/https.js (100%) rename index.html => templates/index.html (100%) rename links.html => templates/links.html (100%) rename manifest.json => templates/manifest.json (100%) rename redirect.js => templates/redirect.js (100%) rename uv.html => templates/uv.html (100%) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..25c0144 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,41 @@ +name: Build Docker +run-name: Build Docker Images +on: + push: + +jobs: + Build Image: + runs-on: [ubuntu-latest, amd] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install Docker + run : | + apt-get install ca-certificates curl gnupg + install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + chmod a+r /etc/apt/keyrings/docker.gpg + echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null + apt-get update + apt-get install docker-ce-cli -y + - name: Build Docker image + run : | + echo "${{ secrets.DOCKERGIT_TOKEN }}" | docker login git.woodburn.au -u nathanwoodburn --password-stdin + echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" + tag=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} + tag=${tag//\//-} + tag_num=${GITHUB_RUN_NUMBER} + echo "tag_num=$tag_num" + + if [[ "$tag" == "main" ]]; then + tag="latest" + else + tag_num="${tag}-${tag_num}" + fi + + + docker build -t hnsau:$tag_num . + docker tag hnsau:$tag_num git.woodburn.au/nathanwoodburn/hnsau:$tag_num + docker push git.woodburn.au/nathanwoodburn/hnsau:$tag_num + docker tag hnsau:$tag_num git.woodburn.au/nathanwoodburn/hnsau:$tag + docker push git.woodburn.au/nathanwoodburn/hnsau:$tag \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..9e516d0 --- /dev/null +++ b/main.py @@ -0,0 +1,42 @@ +import time +from flask import Flask +from server import app +import server +from gunicorn.app.base import BaseApplication +import os +import dotenv +import sys +import json + + +class GunicornApp(BaseApplication): + def __init__(self, app, options=None): + self.options = options or {} + self.application = app + super().__init__() + + def load_config(self): + for key, value in self.options.items(): + if key in self.cfg.settings and value is not None: + self.cfg.set(key.lower(), value) + + def load(self): + return self.application + +if __name__ == '__main__': + workers = os.getenv('WORKERS') + threads = os.getenv('THREADS') + if workers is None: + workers = 1 + if threads is None: + threads = 2 + workers = int(workers) + threads = int(threads) + options = { + 'bind': '0.0.0.0:5000', + 'workers': workers, + 'threads': threads, + } + gunicorn_app = GunicornApp(app, options) + print('Starting server with ' + str(workers) + ' workers and ' + str(threads) + ' threads', flush=True) + gunicorn_app.run() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3cd9925 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +flask +python-dotenv +gunicorn +requests +cloudflare \ No newline at end of file diff --git a/server.py b/server.py new file mode 100644 index 0000000..9a2e075 --- /dev/null +++ b/server.py @@ -0,0 +1,66 @@ +from flask import Flask, make_response, redirect, request, jsonify, render_template, send_from_directory +import os +import dotenv +import requests +import CloudFlare + +app = Flask(__name__) +dotenv.load_dotenv() + + +#Assets routes +@app.route('/assets/') +def send_report(path): + return send_from_directory('templates/assets', path) + +@app.route('/sitemap') +@app.route('/sitemap.xml') +def sitemap(): + # Remove all .html from sitemap + with open('templates/sitemap.xml') as file: + sitemap = file.read() + + sitemap = sitemap.replace('.html', '') + return make_response(sitemap, 200, {'Content-Type': 'application/xml'}) + +@app.route('/favicon.png') +def faviconPNG(): + return send_from_directory('templates/assets/img', 'favicon.png') + +@app.route('/https.js') +@app.route('/handshake.js') +@app.route('/redirect.js') +def handshake(): + # return request.path + return send_from_directory('templates/', request.path.split('/')[-1]) + +@app.route('/.well-known/wallets/') +def wallet(path): + return send_from_directory('.well-known/wallets', path, mimetype='text/plain') + + + +# Main routes +@app.route('/') +def index(): + return render_template('index.html') + +@app.route('/') +def catch_all(path): + # If file exists, load it + if os.path.isfile('templates/' + path): + return render_template(path) + + # Try with .html + if os.path.isfile('templates/' + path + '.html'): + return render_template(path + '.html') + + return render_template('404.html'), 404 + +# 404 catch all +@app.errorhandler(404) +def not_found(e): + return render_template('404.html'), 404 + +if __name__ == '__main__': + app.run(debug=True, port=5000, host='0.0.0.0') \ No newline at end of file diff --git a/.well-known/wallets/HNS b/templates/.well-known/wallets/HNS similarity index 100% rename from .well-known/wallets/HNS rename to templates/.well-known/wallets/HNS diff --git a/404.html b/templates/404.html similarity index 100% rename from 404.html rename to templates/404.html diff --git a/about.html b/templates/about.html similarity index 100% rename from about.html rename to templates/about.html diff --git a/assets/bootstrap/css/bootstrap.min.css b/templates/assets/bootstrap/css/bootstrap.min.css similarity index 100% rename from assets/bootstrap/css/bootstrap.min.css rename to templates/assets/bootstrap/css/bootstrap.min.css diff --git a/assets/bootstrap/js/bootstrap.min.js b/templates/assets/bootstrap/js/bootstrap.min.js similarity index 100% rename from assets/bootstrap/js/bootstrap.min.js rename to templates/assets/bootstrap/js/bootstrap.min.js diff --git a/assets/css/404.css b/templates/assets/css/404.css similarity index 100% rename from assets/css/404.css rename to templates/assets/css/404.css diff --git a/assets/css/vanilla-zoom.min.css b/templates/assets/css/vanilla-zoom.min.css similarity index 100% rename from assets/css/vanilla-zoom.min.css rename to templates/assets/css/vanilla-zoom.min.css diff --git a/assets/fonts/fa-brands-400.eot b/templates/assets/fonts/fa-brands-400.eot similarity index 100% rename from assets/fonts/fa-brands-400.eot rename to templates/assets/fonts/fa-brands-400.eot diff --git a/assets/fonts/fa-brands-400.svg b/templates/assets/fonts/fa-brands-400.svg similarity index 100% rename from assets/fonts/fa-brands-400.svg rename to templates/assets/fonts/fa-brands-400.svg diff --git a/assets/fonts/fa-brands-400.ttf b/templates/assets/fonts/fa-brands-400.ttf similarity index 100% rename from assets/fonts/fa-brands-400.ttf rename to templates/assets/fonts/fa-brands-400.ttf diff --git a/assets/fonts/fa-brands-400.woff b/templates/assets/fonts/fa-brands-400.woff similarity index 100% rename from assets/fonts/fa-brands-400.woff rename to templates/assets/fonts/fa-brands-400.woff diff --git a/assets/fonts/fa-brands-400.woff2 b/templates/assets/fonts/fa-brands-400.woff2 similarity index 100% rename from assets/fonts/fa-brands-400.woff2 rename to templates/assets/fonts/fa-brands-400.woff2 diff --git a/assets/fonts/fa-regular-400.eot b/templates/assets/fonts/fa-regular-400.eot similarity index 100% rename from assets/fonts/fa-regular-400.eot rename to templates/assets/fonts/fa-regular-400.eot diff --git a/assets/fonts/fa-regular-400.svg b/templates/assets/fonts/fa-regular-400.svg similarity index 100% rename from assets/fonts/fa-regular-400.svg rename to templates/assets/fonts/fa-regular-400.svg diff --git a/assets/fonts/fa-regular-400.ttf b/templates/assets/fonts/fa-regular-400.ttf similarity index 100% rename from assets/fonts/fa-regular-400.ttf rename to templates/assets/fonts/fa-regular-400.ttf diff --git a/assets/fonts/fa-regular-400.woff b/templates/assets/fonts/fa-regular-400.woff similarity index 100% rename from assets/fonts/fa-regular-400.woff rename to templates/assets/fonts/fa-regular-400.woff diff --git a/assets/fonts/fa-regular-400.woff2 b/templates/assets/fonts/fa-regular-400.woff2 similarity index 100% rename from assets/fonts/fa-regular-400.woff2 rename to templates/assets/fonts/fa-regular-400.woff2 diff --git a/assets/fonts/fa-solid-900.eot b/templates/assets/fonts/fa-solid-900.eot similarity index 100% rename from assets/fonts/fa-solid-900.eot rename to templates/assets/fonts/fa-solid-900.eot diff --git a/assets/fonts/fa-solid-900.svg b/templates/assets/fonts/fa-solid-900.svg similarity index 100% rename from assets/fonts/fa-solid-900.svg rename to templates/assets/fonts/fa-solid-900.svg diff --git a/assets/fonts/fa-solid-900.ttf b/templates/assets/fonts/fa-solid-900.ttf similarity index 100% rename from assets/fonts/fa-solid-900.ttf rename to templates/assets/fonts/fa-solid-900.ttf diff --git a/assets/fonts/fa-solid-900.woff b/templates/assets/fonts/fa-solid-900.woff similarity index 100% rename from assets/fonts/fa-solid-900.woff rename to templates/assets/fonts/fa-solid-900.woff diff --git a/assets/fonts/fa-solid-900.woff2 b/templates/assets/fonts/fa-solid-900.woff2 similarity index 100% rename from assets/fonts/fa-solid-900.woff2 rename to templates/assets/fonts/fa-solid-900.woff2 diff --git a/assets/fonts/fontawesome-all.min.css b/templates/assets/fonts/fontawesome-all.min.css similarity index 100% rename from assets/fonts/fontawesome-all.min.css rename to templates/assets/fonts/fontawesome-all.min.css diff --git a/assets/fonts/ionicons.eot b/templates/assets/fonts/ionicons.eot similarity index 100% rename from assets/fonts/ionicons.eot rename to templates/assets/fonts/ionicons.eot diff --git a/assets/fonts/ionicons.min.css b/templates/assets/fonts/ionicons.min.css similarity index 100% rename from assets/fonts/ionicons.min.css rename to templates/assets/fonts/ionicons.min.css diff --git a/assets/fonts/ionicons.svg b/templates/assets/fonts/ionicons.svg similarity index 100% rename from assets/fonts/ionicons.svg rename to templates/assets/fonts/ionicons.svg diff --git a/assets/fonts/ionicons.ttf b/templates/assets/fonts/ionicons.ttf similarity index 100% rename from assets/fonts/ionicons.ttf rename to templates/assets/fonts/ionicons.ttf diff --git a/assets/fonts/ionicons.woff b/templates/assets/fonts/ionicons.woff similarity index 100% rename from assets/fonts/ionicons.woff rename to templates/assets/fonts/ionicons.woff diff --git a/assets/img/16.png b/templates/assets/img/16.png similarity index 100% rename from assets/img/16.png rename to templates/assets/img/16.png diff --git a/assets/img/180.png b/templates/assets/img/180.png similarity index 100% rename from assets/img/180.png rename to templates/assets/img/180.png diff --git a/assets/img/192.png b/templates/assets/img/192.png similarity index 100% rename from assets/img/192.png rename to templates/assets/img/192.png diff --git a/assets/img/32.png b/templates/assets/img/32.png similarity index 100% rename from assets/img/32.png rename to templates/assets/img/32.png diff --git a/assets/img/512.png b/templates/assets/img/512.png similarity index 100% rename from assets/img/512.png rename to templates/assets/img/512.png diff --git a/assets/img/HNSAUbanner.png b/templates/assets/img/HNSAUbanner.png similarity index 100% rename from assets/img/HNSAUbanner.png rename to templates/assets/img/HNSAUbanner.png diff --git a/assets/img/Life cycle of a name.png b/templates/assets/img/Life cycle of a name.png similarity index 100% rename from assets/img/Life cycle of a name.png rename to templates/assets/img/Life cycle of a name.png diff --git a/assets/img/avatars/avatar1.jpg b/templates/assets/img/avatars/avatar1.jpg similarity index 100% rename from assets/img/avatars/avatar1.jpg rename to templates/assets/img/avatars/avatar1.jpg diff --git a/assets/img/avatars/avatar2.jpg b/templates/assets/img/avatars/avatar2.jpg similarity index 100% rename from assets/img/avatars/avatar2.jpg rename to templates/assets/img/avatars/avatar2.jpg diff --git a/assets/img/avatars/avatar3.jpg b/templates/assets/img/avatars/avatar3.jpg similarity index 100% rename from assets/img/avatars/avatar3.jpg rename to templates/assets/img/avatars/avatar3.jpg diff --git a/assets/img/favicon.png b/templates/assets/img/favicon.png similarity index 100% rename from assets/img/favicon.png rename to templates/assets/img/favicon.png diff --git a/assets/img/favicon/16.png b/templates/assets/img/favicon/16.png similarity index 100% rename from assets/img/favicon/16.png rename to templates/assets/img/favicon/16.png diff --git a/assets/img/favicon/180.png b/templates/assets/img/favicon/180.png similarity index 100% rename from assets/img/favicon/180.png rename to templates/assets/img/favicon/180.png diff --git a/assets/img/favicon/192.png b/templates/assets/img/favicon/192.png similarity index 100% rename from assets/img/favicon/192.png rename to templates/assets/img/favicon/192.png diff --git a/assets/img/favicon/32.png b/templates/assets/img/favicon/32.png similarity index 100% rename from assets/img/favicon/32.png rename to templates/assets/img/favicon/32.png diff --git a/assets/img/favicon/512.png b/templates/assets/img/favicon/512.png similarity index 100% rename from assets/img/favicon/512.png rename to templates/assets/img/favicon/512.png diff --git a/assets/img/favicon/transparent.png b/templates/assets/img/favicon/transparent.png similarity index 100% rename from assets/img/favicon/transparent.png rename to templates/assets/img/favicon/transparent.png diff --git a/assets/img/hns/16.png b/templates/assets/img/hns/16.png similarity index 100% rename from assets/img/hns/16.png rename to templates/assets/img/hns/16.png diff --git a/assets/img/hns/180.png b/templates/assets/img/hns/180.png similarity index 100% rename from assets/img/hns/180.png rename to templates/assets/img/hns/180.png diff --git a/assets/img/hns/192.png b/templates/assets/img/hns/192.png similarity index 100% rename from assets/img/hns/192.png rename to templates/assets/img/hns/192.png diff --git a/assets/img/hns/32.png b/templates/assets/img/hns/32.png similarity index 100% rename from assets/img/hns/32.png rename to templates/assets/img/hns/32.png diff --git a/assets/img/hns/512.png b/templates/assets/img/hns/512.png similarity index 100% rename from assets/img/hns/512.png rename to templates/assets/img/hns/512.png diff --git a/assets/img/hnsaupromo.png b/templates/assets/img/hnsaupromo.png similarity index 100% rename from assets/img/hnsaupromo.png rename to templates/assets/img/hnsaupromo.png diff --git a/assets/img/links/NJW Icon 512.png b/templates/assets/img/links/NJW Icon 512.png similarity index 100% rename from assets/img/links/NJW Icon 512.png rename to templates/assets/img/links/NJW Icon 512.png diff --git a/assets/img/links/impervious.svg b/templates/assets/img/links/impervious.svg similarity index 100% rename from assets/img/links/impervious.svg rename to templates/assets/img/links/impervious.svg diff --git a/assets/img/scenery/Handshake.png b/templates/assets/img/scenery/Handshake.png similarity index 100% rename from assets/img/scenery/Handshake.png rename to templates/assets/img/scenery/Handshake.png diff --git a/assets/img/scenery/beach1.jpg b/templates/assets/img/scenery/beach1.jpg similarity index 100% rename from assets/img/scenery/beach1.jpg rename to templates/assets/img/scenery/beach1.jpg diff --git a/assets/img/scenery/beach2.jpg b/templates/assets/img/scenery/beach2.jpg similarity index 100% rename from assets/img/scenery/beach2.jpg rename to templates/assets/img/scenery/beach2.jpg diff --git a/assets/img/scenery/image1.jpg b/templates/assets/img/scenery/image1.jpg similarity index 100% rename from assets/img/scenery/image1.jpg rename to templates/assets/img/scenery/image1.jpg diff --git a/assets/img/scenery/image4.jpg b/templates/assets/img/scenery/image4.jpg similarity index 100% rename from assets/img/scenery/image4.jpg rename to templates/assets/img/scenery/image4.jpg diff --git a/assets/img/scenery/image5.jpg b/templates/assets/img/scenery/image5.jpg similarity index 100% rename from assets/img/scenery/image5.jpg rename to templates/assets/img/scenery/image5.jpg diff --git a/assets/img/scenery/image6.jpg b/templates/assets/img/scenery/image6.jpg similarity index 100% rename from assets/img/scenery/image6.jpg rename to templates/assets/img/scenery/image6.jpg diff --git a/assets/img/scenery/surf.jpg b/templates/assets/img/scenery/surf.jpg similarity index 100% rename from assets/img/scenery/surf.jpg rename to templates/assets/img/scenery/surf.jpg diff --git a/assets/img/tech/image4.jpg b/templates/assets/img/tech/image4.jpg similarity index 100% rename from assets/img/tech/image4.jpg rename to templates/assets/img/tech/image4.jpg diff --git a/assets/img/wfavicon.png b/templates/assets/img/wfavicon.png similarity index 100% rename from assets/img/wfavicon.png rename to templates/assets/img/wfavicon.png diff --git a/assets/js/404.js b/templates/assets/js/404.js similarity index 100% rename from assets/js/404.js rename to templates/assets/js/404.js diff --git a/assets/js/test.js b/templates/assets/js/test.js similarity index 100% rename from assets/js/test.js rename to templates/assets/js/test.js diff --git a/assets/js/theme.js b/templates/assets/js/theme.js similarity index 100% rename from assets/js/theme.js rename to templates/assets/js/theme.js diff --git a/assets/js/vanilla-zoom.js b/templates/assets/js/vanilla-zoom.js similarity index 100% rename from assets/js/vanilla-zoom.js rename to templates/assets/js/vanilla-zoom.js diff --git a/contact.html b/templates/contact.html similarity index 100% rename from contact.html rename to templates/contact.html diff --git a/faq.html b/templates/faq.html similarity index 100% rename from faq.html rename to templates/faq.html diff --git a/handshake.js b/templates/handshake.js similarity index 100% rename from handshake.js rename to templates/handshake.js diff --git a/https.js b/templates/https.js similarity index 100% rename from https.js rename to templates/https.js diff --git a/index.html b/templates/index.html similarity index 100% rename from index.html rename to templates/index.html diff --git a/links.html b/templates/links.html similarity index 100% rename from links.html rename to templates/links.html diff --git a/manifest.json b/templates/manifest.json similarity index 100% rename from manifest.json rename to templates/manifest.json diff --git a/redirect.js b/templates/redirect.js similarity index 100% rename from redirect.js rename to templates/redirect.js diff --git a/uv.html b/templates/uv.html similarity index 100% rename from uv.html rename to templates/uv.html