diff --git a/requirements.txt b/requirements.txt
index 65df85baf140ce35bf0eef56cc63cfd249cd40e5..b7475d8bd52429988e23b1cdca449b0fbda62dd1 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,6 +4,7 @@ click==8.1.7
 colorama==0.4.6
 Flask==3.0.0
 Flask-SQLAlchemy==3.1.1
+Flask-WTF==1.2.0
 gevent==23.9.1
 greenlet==3.0.3
 gunicorn==21.2.0
diff --git a/venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/INSTALLER b/venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/INSTALLER
similarity index 100%
rename from venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/INSTALLER
rename to venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/INSTALLER
diff --git a/venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/METADATA b/venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/METADATA
similarity index 99%
rename from venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/METADATA
rename to venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/METADATA
index 92f1ff25658838ae9639052003770899dc3851cb..cb81ed403721fc073d4ae733df63c2fa03b7bebc 100644
--- a/venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/METADATA
+++ b/venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/METADATA
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: Flask-WTF
-Version: 1.2.1
+Version: 1.2.0
 Summary: Form rendering, validation, and CSRF protection for Flask with WTForms.
 Project-URL: Documentation, https://flask-wtf.readthedocs.io/
 Project-URL: Changes, https://flask-wtf.readthedocs.io/changes/
diff --git a/venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/RECORD b/venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/RECORD
similarity index 70%
rename from venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/RECORD
rename to venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/RECORD
index a7814665f525f142935e652b0eafe2213194eccf..c0e003ba731514066ad17041c32d77cc998b3714 100644
--- a/venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/RECORD
+++ b/venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/RECORD
@@ -1,10 +1,10 @@
-flask_wtf-1.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
-flask_wtf-1.2.1.dist-info/METADATA,sha256=9Y5upDJ7WU2m2l4erWImF3HcVSWIZKH3TdX6klYpq4M,3373
-flask_wtf-1.2.1.dist-info/RECORD,,
-flask_wtf-1.2.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
-flask_wtf-1.2.1.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
-flask_wtf-1.2.1.dist-info/licenses/LICENSE.rst,sha256=1fGQNkUVeMs27u8EyZ6_fXyi5w3PBDY2UZvEIOFafGI,1475
-flask_wtf/__init__.py,sha256=x6ydw5SJzsXZgz-Y6IM_95Sy8VufRepvZH1DUIlFoTo,214
+flask_wtf-1.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+flask_wtf-1.2.0.dist-info/METADATA,sha256=DzMrNjYSRoyVUkYdVzRXCc0AOriWm1nM4HzNyd8VSMo,3373
+flask_wtf-1.2.0.dist-info/RECORD,,
+flask_wtf-1.2.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+flask_wtf-1.2.0.dist-info/WHEEL,sha256=9QBuHhg6FNW7lppboF2vKVbCGTVzsFykgRQjjlajrhA,87
+flask_wtf-1.2.0.dist-info/licenses/LICENSE.rst,sha256=1fGQNkUVeMs27u8EyZ6_fXyi5w3PBDY2UZvEIOFafGI,1475
+flask_wtf/__init__.py,sha256=ObJw25Z-Uq2HgLhMKhfKk-BVr2hBXxBdEx_fyV4geBA,214
 flask_wtf/__pycache__/__init__.cpython-311.pyc,,
 flask_wtf/__pycache__/_compat.cpython-311.pyc,,
 flask_wtf/__pycache__/csrf.cpython-311.pyc,,
@@ -13,7 +13,7 @@ flask_wtf/__pycache__/form.cpython-311.pyc,,
 flask_wtf/__pycache__/i18n.cpython-311.pyc,,
 flask_wtf/_compat.py,sha256=N3sqC9yzFWY-3MZ7QazX1sidvkO3d5yy4NR6lkp0s94,248
 flask_wtf/csrf.py,sha256=O-fjnWygxxi_FsIU2koua97ZpIhiOJVDHA57dXLpvTA,10171
-flask_wtf/file.py,sha256=AsfkYTCgtqGWySimc_NjeAxg-DtpdcthhqMLrXIDAhU,4706
+flask_wtf/file.py,sha256=CKr7kAgGqmKyC47gPuYoR7EHVSgl06xKtkyMmEPsXhs,4759
 flask_wtf/form.py,sha256=TmR7xCrxin2LHp6thn7fq1OeU8aLB7xsZzvv52nH7Ss,4049
 flask_wtf/i18n.py,sha256=TyO8gqt9DocHMSaNhj0KKgxoUrPYs-G1nVW-jns0SOw,1166
 flask_wtf/recaptcha/__init__.py,sha256=m4eNGoU3Q0Wnt_wP8VvOlA0mwWuoMtAcK9pYT7sPFp8,106
diff --git a/venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/REQUESTED b/venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/REQUESTED
similarity index 100%
rename from venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/REQUESTED
rename to venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/REQUESTED
diff --git a/venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/WHEEL b/venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/WHEEL
similarity index 100%
rename from venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/WHEEL
rename to venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/WHEEL
diff --git a/venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/licenses/LICENSE.rst b/venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/licenses/LICENSE.rst
similarity index 100%
rename from venv/Lib/site-packages/flask_wtf-1.2.1.dist-info/licenses/LICENSE.rst
rename to venv/Lib/site-packages/flask_wtf-1.2.0.dist-info/licenses/LICENSE.rst
diff --git a/venv/Lib/site-packages/flask_wtf/__init__.py b/venv/Lib/site-packages/flask_wtf/__init__.py
index be2649e26d8dfa2cde5457f13b72715135d12b5a..3f884c0728d6879b73cccf986664d89bc57c1484 100644
--- a/venv/Lib/site-packages/flask_wtf/__init__.py
+++ b/venv/Lib/site-packages/flask_wtf/__init__.py
@@ -5,4 +5,4 @@ from .recaptcha import Recaptcha
 from .recaptcha import RecaptchaField
 from .recaptcha import RecaptchaWidget
 
-__version__ = "1.2.1"
+__version__ = "1.2.0"
diff --git a/venv/Lib/site-packages/flask_wtf/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/__pycache__/__init__.cpython-311.pyc
index 304531c8dd034ce8289de1e379acd11a66bf38cd..cc492fb7f408d036f111ed881bee398192c91b20 100644
Binary files a/venv/Lib/site-packages/flask_wtf/__pycache__/__init__.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/__pycache__/__init__.cpython-311.pyc differ
diff --git a/venv/Lib/site-packages/flask_wtf/__pycache__/_compat.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/__pycache__/_compat.cpython-311.pyc
index beb00be94d82d4c7316bfcf1139bf843f1194cc5..d3b114711695270b6f6b23c27085d8d5a9e4ac65 100644
Binary files a/venv/Lib/site-packages/flask_wtf/__pycache__/_compat.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/__pycache__/_compat.cpython-311.pyc differ
diff --git a/venv/Lib/site-packages/flask_wtf/__pycache__/csrf.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/__pycache__/csrf.cpython-311.pyc
index 3a6e9a34361fdea3a9249ed18fe09ac5474f45b6..3fd39c21ef0bbb6810a3f32664d89d8534bea2f1 100644
Binary files a/venv/Lib/site-packages/flask_wtf/__pycache__/csrf.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/__pycache__/csrf.cpython-311.pyc differ
diff --git a/venv/Lib/site-packages/flask_wtf/__pycache__/file.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/__pycache__/file.cpython-311.pyc
index bac198e45ca285c998a6e60eec1a57deacb716eb..d747ca899480b04119d65dc0245885758a6377a7 100644
Binary files a/venv/Lib/site-packages/flask_wtf/__pycache__/file.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/__pycache__/file.cpython-311.pyc differ
diff --git a/venv/Lib/site-packages/flask_wtf/__pycache__/form.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/__pycache__/form.cpython-311.pyc
index 156609e14de7e83103f2a2c776a0a668e0e6b194..434265db1bc141bd6e9e00db52dc7ece9afde4a3 100644
Binary files a/venv/Lib/site-packages/flask_wtf/__pycache__/form.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/__pycache__/form.cpython-311.pyc differ
diff --git a/venv/Lib/site-packages/flask_wtf/__pycache__/i18n.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/__pycache__/i18n.cpython-311.pyc
index 04d2d7e2cbe3df7f61e7c03d89b95925494f4bec..d4ee7b4c91f2cf66961434de6bc21c4f859e9c8c 100644
Binary files a/venv/Lib/site-packages/flask_wtf/__pycache__/i18n.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/__pycache__/i18n.cpython-311.pyc differ
diff --git a/venv/Lib/site-packages/flask_wtf/file.py b/venv/Lib/site-packages/flask_wtf/file.py
index a720dff8d81911df179e80512caa0056a47be410..5646600f82d1acfa9a5b2704bb6c802f96d0f2f0 100644
--- a/venv/Lib/site-packages/flask_wtf/file.py
+++ b/venv/Lib/site-packages/flask_wtf/file.py
@@ -47,9 +47,10 @@ class FileRequired(DataRequired):
     """
 
     def __call__(self, form, field):
-        field_data = [field.data] if not isinstance(field.data, list) else field.data
+        if not isinstance(field.data, list):
+            field.data = [field.data]
         if not (
-            all(isinstance(x, FileStorage) and x for x in field_data) and field_data
+            all(isinstance(x, FileStorage) and x for x in field.data) and field.data
         ):
             raise StopValidation(
                 self.message or field.gettext("This field is required.")
@@ -75,13 +76,14 @@ class FileAllowed:
         self.message = message
 
     def __call__(self, form, field):
-        field_data = [field.data] if not isinstance(field.data, list) else field.data
+        if not isinstance(field.data, list):
+            field.data = [field.data]
         if not (
-            all(isinstance(x, FileStorage) and x for x in field_data) and field_data
+            all(isinstance(x, FileStorage) and x for x in field.data) and field.data
         ):
             return
 
-        filenames = [f.filename.lower() for f in field_data]
+        filenames = [f.filename.lower() for f in field.data]
 
         for filename in filenames:
             if isinstance(self.upload_set, abc.Iterable):
@@ -95,7 +97,7 @@ class FileAllowed:
                     ).format(extensions=", ".join(self.upload_set))
                 )
 
-            if not self.upload_set.file_allowed(field_data, filename):
+            if not self.upload_set.file_allowed(field.data, filename):
                 raise StopValidation(
                     self.message
                     or field.gettext("File does not have an approved extension.")
@@ -122,14 +124,16 @@ class FileSize:
         self.message = message
 
     def __call__(self, form, field):
-        field_data = [field.data] if not isinstance(field.data, list) else field.data
+        if not isinstance(field.data, list):
+            field.data = [field.data]
         if not (
-            all(isinstance(x, FileStorage) and x for x in field_data) and field_data
+            all(isinstance(x, FileStorage) and x for x in field.data) and field.data
         ):
             return
 
-        for f in field_data:
+        for f in field.data:
             file_size = len(f.read())
+            print(f, file_size, self.max_size, self.min_size)
             f.seek(0)  # reset cursor position to beginning of file
 
             if (file_size < self.min_size) or (file_size > self.max_size):
diff --git a/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/__init__.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/__init__.cpython-311.pyc
index ad5312065a905cf14e41f922291566616856c8fb..fe79a9aef7d9d7147a94eab5c4c4a48536547539 100644
Binary files a/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/__init__.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/__init__.cpython-311.pyc differ
diff --git a/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/fields.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/fields.cpython-311.pyc
index 1eb5b704de329b4e160ea7d0eefa8dd48b16104d..eba47cb335209d9abc36f31be5779b684315a9cc 100644
Binary files a/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/fields.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/fields.cpython-311.pyc differ
diff --git a/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/validators.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/validators.cpython-311.pyc
index b8a1ffd5e1f5b5180ec496e94c61d8d59e9302f6..1fd4e8df320b2b9c464813d4b27e912dd20f570a 100644
Binary files a/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/validators.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/validators.cpython-311.pyc differ
diff --git a/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/widgets.cpython-311.pyc b/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/widgets.cpython-311.pyc
index 6f5bb03a28b7e7b55f3ef3a93a63eda13b3d3754..6a613bad6fb737df45ae0e6d900e6d7b2bdaea14 100644
Binary files a/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/widgets.cpython-311.pyc and b/venv/Lib/site-packages/flask_wtf/recaptcha/__pycache__/widgets.cpython-311.pyc differ
diff --git a/wsgi.py b/wsgi.py
index 78681907a56f6e8852ba79e6565c4778be08abb6..ab58b4ebdd8b8760b2bbb45528cdda8c27fba07a 100644
--- a/wsgi.py
+++ b/wsgi.py
@@ -1,8 +1,11 @@
 import sys
 import logging
 from app import app as application
+from markupsafe import Markup
+
+sys.modules['flask'].Markup = Markup
 
 logging.basicConfig(stream=sys.stderr)
 
 if __name__ == '__main__':
-    application.run(host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
+    application.run(host='0.0.0.0', port=8080)