diff --git a/.gitignore b/.gitignore
index 3a4dc13051601b1718ecf0a8e1cda27e67f6d8fd..e093c59e03a0b81cc7e954c487083935f5e42d8a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ myproject/myapp/__pycache__
 myproject/myproject/__pycache__/__init__.cpython-312.pyc
 myproject/myproject/__pycache__/settings.cpython-312.pyc
 myproject/myproject/__pycache__/urls.cpython-312.pyc
+.venv/
diff --git a/myproject/Dockerfile b/myproject/Dockerfile
index 7a8fc00a0db6ebcd262868b26a3cee7f58ae9cb4..5c0c8d92ec646f39341d138960e27fa663e2295a 100644
--- a/myproject/Dockerfile
+++ b/myproject/Dockerfile
@@ -15,7 +15,7 @@ COPY ./myapp/static ./myapp/static
 COPY tailwind.config.js ./
 
 # Run the Tailwind build process
-#RUN npx tailwindcss-cli build myapp/static/src/input.css -o myapp/static/src/output.css
+# RUN npx tailwindcss-cli build myapp/static/src/input.css -o myapp/static/src/output.css
 
 # Use an official Python runtime as the final stage
 FROM python:3.11
diff --git a/myproject/debug.log b/myproject/debug.log
new file mode 100644
index 0000000000000000000000000000000000000000..5ab8224859533c27919176697cc46b738e026f3c
--- /dev/null
+++ b/myproject/debug.log
@@ -0,0 +1,425 @@
+User uploaded file 
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+User uploaded file
+Error
+Warning
+/usr/src/app/myapp/urls.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/urls.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/urls.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/urls.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/urls.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+User uploaded file
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+Not Found: /favicon.ico
+User uploaded file has been received
+Internal Server Error: /uploading_file/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
+    response = get_response(request)
+               ^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 204, in _get_response
+    self.check_response(response, callback)
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 332, in check_response
+    raise ValueError(
+ValueError: The view myapp.views.handling_music_file didn't return an HttpResponse object. It returned None instead.
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+User uploaded file has been received
+Internal Server Error: /uploading_file/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
+    response = get_response(request)
+               ^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/utils/deprecation.py", line 136, in __call__
+    response = self.process_response(request, response)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/middleware/clickjacking.py", line 27, in process_response
+    if response.get("X-Frame-Options") is not None:
+       ^^^^^^^^^^^^
+AttributeError: 'str' object has no attribute 'get'
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+User uploaded file has been received
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+User uploaded file has been received
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+User uploaded file has been received ethereal-vistas-191254.mp3
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+Internal Server Error: /uploading_file/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
+    response = get_response(request)
+               ^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/src/app/myapp/views.py", line 14, in handling_music_file
+    logger.info('Unauthenticated user uploaded file %s at %s', request.FILES['audio_file'].name, timezone.now())
+                                                                                                 ^^^^^^^^
+NameError: name 'timezone' is not defined
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+Unauthenticated user uploaded file ethereal-vistas-191254.mp3 at 2024-03-09 13:53:20.754075+00:00
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+Internal Server Error: /uploading_file/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
+    response = get_response(request)
+               ^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/src/app/myapp/views.py", line 19, in handling_music_file
+    log_data = get_log_data(Action.UPLOAD_FILE, 'success', file=request.FILES['audio_file'].name)
+               ^^^^^^^^^^^^
+NameError: name 'get_log_data' is not defined
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/models.py changed, reloading.
+Watching for file changes with StatReloader
+Internal Server Error: /uploading_file/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
+    response = get_response(request)
+               ^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/src/app/myapp/views.py", line 28, in handling_music_file
+    log_data = get_log_data(Action.UPLOAD_FILE, 'success', file=request.FILES['audio_file'].name)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/src/app/myapp/views.py", line 15, in get_log_data
+    log_data.update(additional_fields)
+                    ^^^^^^^^^^^^^^^^^
+NameError: name 'additional_fields' is not defined
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+Internal Server Error: /uploading_file/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 134, in debug_sql
+    yield
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 122, in execute
+    return super().execute(sql, params)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 79, in execute
+    return self._execute_with_wrappers(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 105, in _execute
+    return self.cursor.execute(sql, params)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/cursor.py", line 728, in execute
+    self._conn.wait(
+  File "/usr/local/lib/python3.11/site-packages/psycopg/connection.py", line 969, in wait
+    return waiting.wait(gen, self.pgconn.socket, timeout=timeout)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "psycopg_binary/_psycopg/waiting.pyx", line 190, in psycopg_binary._psycopg.wait_c
+  File "/usr/local/lib/python3.11/site-packages/psycopg/cursor.py", line 210, in _execute_gen
+    pgq = self._convert_query(query, params)
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/client_cursor.py", line 79, in _convert_query
+    pgq.convert(query, params)
+  File "/usr/local/lib/python3.11/site-packages/psycopg/_queries.py", line 213, in convert
+    self.dump(vars)
+  File "/usr/local/lib/python3.11/site-packages/psycopg/_queries.py", line 223, in dump
+    self.params = tuple(
+                  ^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/_queries.py", line 224, in <genexpr>
+    self._tx.as_literal(p) if p is not None else b"NULL" for p in params
+    ^^^^^^^^^^^^^^^^^^^^^^
+  File "psycopg_binary/_psycopg/transform.pyx", line 206, in psycopg_binary._psycopg.Transformer.as_literal
+  File "psycopg_binary/_psycopg/transform.pyx", line 215, in psycopg_binary._psycopg.Transformer.as_literal
+  File "/usr/local/lib/python3.11/site-packages/psycopg/adapt.py", line 57, in quote
+    value = self.dump(obj)
+            ^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/types/json.py", line 151, in dump
+    data = dumps(obj)
+           ^^^^^^^^^^
+  File "/usr/local/lib/python3.11/json/__init__.py", line 231, in dumps
+    return _default_encoder.encode(obj)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/json/encoder.py", line 200, in encode
+    chunks = self.iterencode(o, _one_shot=True)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/json/encoder.py", line 258, in iterencode
+    return _iterencode(o, 0)
+           ^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/json/encoder.py", line 180, in default
+    raise TypeError(f'Object of type {o.__class__.__name__} '
+TypeError: Object of type Action is not JSON serializable
+
+During handling of the above exception, another exception occurred:
+
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
+    response = get_response(request)
+               ^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/src/app/myapp/views.py", line 29, in handling_music_file
+    create_log(request.user if request.user.is_authenticated else None, log_data)
+  File "/usr/src/app/myapp/views.py", line 19, in create_log
+    Log.objects.create(user=user, log=log_data)
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 677, in create
+    obj.save(force_insert=True, using=self.db)
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 822, in save
+    self.save_base(
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 909, in save_base
+    updated = self._save_table(
+              ^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 1067, in _save_table
+    results = self._do_insert(
+              ^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 1108, in _do_insert
+    return manager._insert(
+           ^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 1845, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1823, in execute_sql
+    cursor.execute(sql, params)
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 121, in execute
+    with self.debug_sql(sql, params, use_last_executed_query=True):
+  File "/usr/local/lib/python3.11/contextlib.py", line 158, in __exit__
+    self.gen.throw(typ, value, traceback)
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 139, in debug_sql
+    sql = self.db.ops.last_executed_query(self.cursor, sql, params)
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/postgresql/operations.py", line 302, in last_executed_query
+    return self.compose_sql(sql, params)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/postgresql/operations.py", line 195, in compose_sql
+    return mogrify(sql, params, self.connection)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/postgresql/psycopg_any.py", line 22, in mogrify
+    return ClientCursor(cursor.connection).mogrify(sql, params)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/client_cursor.py", line 40, in mogrify
+    pgq = self._convert_query(query, params)
+          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/client_cursor.py", line 79, in _convert_query
+    pgq.convert(query, params)
+  File "/usr/local/lib/python3.11/site-packages/psycopg/_queries.py", line 213, in convert
+    self.dump(vars)
+  File "/usr/local/lib/python3.11/site-packages/psycopg/_queries.py", line 223, in dump
+    self.params = tuple(
+                  ^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/_queries.py", line 224, in <genexpr>
+    self._tx.as_literal(p) if p is not None else b"NULL" for p in params
+    ^^^^^^^^^^^^^^^^^^^^^^
+  File "psycopg_binary/_psycopg/transform.pyx", line 206, in psycopg_binary._psycopg.Transformer.as_literal
+  File "psycopg_binary/_psycopg/transform.pyx", line 215, in psycopg_binary._psycopg.Transformer.as_literal
+  File "/usr/local/lib/python3.11/site-packages/psycopg/adapt.py", line 57, in quote
+    value = self.dump(obj)
+            ^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/types/json.py", line 151, in dump
+    data = dumps(obj)
+           ^^^^^^^^^^
+  File "/usr/local/lib/python3.11/json/__init__.py", line 231, in dumps
+    return _default_encoder.encode(obj)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/json/encoder.py", line 200, in encode
+    chunks = self.iterencode(o, _one_shot=True)
+             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/json/encoder.py", line 258, in iterencode
+    return _iterencode(o, 0)
+           ^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/json/encoder.py", line 180, in default
+    raise TypeError(f'Object of type {o.__class__.__name__} '
+TypeError: Object of type Action is not JSON serializable
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+Internal Server Error: /uploading_file/
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 105, in _execute
+    return self.cursor.execute(sql, params)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/cursor.py", line 732, in execute
+    raise ex.with_traceback(None)
+psycopg.errors.UndefinedTable: relation "myapp_log" does not exist
+LINE 1: INSERT INTO "myapp_log" ("date", "user_id", "log") VALUES ('...
+                    ^
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
+    response = get_response(request)
+               ^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
+    response = wrapped_callback(request, *callback_args, **callback_kwargs)
+               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/src/app/myapp/views.py", line 29, in handling_music_file
+    create_log(request.user if request.user.is_authenticated else None, log_data)
+  File "/usr/src/app/myapp/views.py", line 19, in create_log
+    Log.objects.create(user=user, log=log_data)
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 677, in create
+    obj.save(force_insert=True, using=self.db)
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 822, in save
+    self.save_base(
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 909, in save_base
+    updated = self._save_table(
+              ^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 1067, in _save_table
+    results = self._do_insert(
+              ^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/base.py", line 1108, in _do_insert
+    return manager._insert(
+           ^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/query.py", line 1845, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1823, in execute_sql
+    cursor.execute(sql, params)
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 122, in execute
+    return super().execute(sql, params)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 79, in execute
+    return self._execute_with_wrappers(
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 92, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 100, in _execute
+    with self.db.wrap_database_errors:
+  File "/usr/local/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py", line 105, in _execute
+    return self.cursor.execute(sql, params)
+           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  File "/usr/local/lib/python3.11/site-packages/psycopg/cursor.py", line 732, in execute
+    raise ex.with_traceback(None)
+django.db.utils.ProgrammingError: relation "myapp_log" does not exist
+LINE 1: INSERT INTO "myapp_log" ("date", "user_id", "log") VALUES ('...
+                    ^
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+Watching for file changes with StatReloader
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+Watching for file changes with StatReloader
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+Watching for file changes with StatReloader
+/usr/src/app/myapp/forms.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/views.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/forms.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/forms.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/forms.py changed, reloading.
+Watching for file changes with StatReloader
+/usr/src/app/myapp/forms.py changed, reloading.
+Watching for file changes with StatReloader
diff --git a/myproject/docker-compose.yml b/myproject/docker-compose.yml
index 7726095e04452f92db2dcad75ffb0ce07acd4d77..84ac46fcb7746ef1f31bc090b71aa5ad58bdb5ca 100644
--- a/myproject/docker-compose.yml
+++ b/myproject/docker-compose.yml
@@ -2,7 +2,7 @@
 version: '3.8'
 services:
   db:
-    image: postgres:13
+    image: postgres:16.1
     volumes:
       - postgres_data:/var/lib/postgresql/data
     restart: unless-stopped
@@ -37,6 +37,20 @@ services:
       - .:/usr/src/app
       - static_volume:/usr/src/app/static
 
+  tensorflow_serving:
+    image: tensorflow/serving
+    ports:
+      - "8501:8501"
+    volumes:
+      - ./models:/models
+    environment:
+      - MODEL_NAME=instrument_model
+      - MODEL_BASE_PATH=/models/instrument_model
+    command:
+      - --model_base_path=/models/instrument_model
+      - --rest_api_port=8501
+      - --model_name=instrument_model
+
 volumes:
   static_volume:
   postgres_data:
diff --git a/myproject/models/instrument_model/1/fingerprint.pb b/myproject/models/instrument_model/1/fingerprint.pb
new file mode 100644
index 0000000000000000000000000000000000000000..141b4c1792009ca22145b9f5ba9c01ed66ce207c
--- /dev/null
+++ b/myproject/models/instrument_model/1/fingerprint.pb
@@ -0,0 +1 @@
+؋���������ס�ȭ��ʏ����� �Ԛ���ʘ�(����Ǜ	2
\ No newline at end of file
diff --git a/myproject/models/instrument_model/1/keras_metadata.pb b/myproject/models/instrument_model/1/keras_metadata.pb
new file mode 100644
index 0000000000000000000000000000000000000000..4d889d7af020adb530b97500ddd438adb64c68a7
--- /dev/null
+++ b/myproject/models/instrument_model/1/keras_metadata.pb
@@ -0,0 +1,20 @@
+
+�\root"_tf_keras_sequential*�\{"name": "sequential", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": false, "class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 128, 44, 1]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_input"}}, {"class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 128, 44, 1]}, "filters": 32, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}}, {"class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}}, {"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "dtype": "float32", "filters": 64, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_1", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}}, {"class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}}, {"class_name": "Conv2D", "config": {"name": "conv2d_2", "trainable": true, "dtype": "float32", "filters": 64, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 64, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dropout", "config": {"name": "dropout_2", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 32, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 4, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}]}, "shared_object_id": 25, "input_spec": [{"class_name": "InputSpec", "config": {"dtype": null, "shape": {"class_name": "__tuple__", "items": [null, 128, 44, 1]}, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}}], "build_input_shape": {"class_name": "TensorShape", "items": [null, 128, 44, 1]}, "is_graph_network": true, "full_save_spec": {"class_name": "__tuple__", "items": [[{"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 128, 44, 1]}, "float32", "conv2d_input"]}], {}]}, "save_spec": {"class_name": "TypeSpec", "type_spec": "tf.TensorSpec", "serialized": [{"class_name": "TensorShape", "items": [null, 128, 44, 1]}, "float32", "conv2d_input"]}, "keras_version": "2.15.0", "backend": "tensorflow", "model_config": {"class_name": "Sequential", "config": {"name": "sequential", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": {"class_name": "__tuple__", "items": [null, 128, 44, 1]}, "dtype": "float32", "sparse": false, "ragged": false, "name": "conv2d_input"}, "shared_object_id": 0}, {"class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 128, 44, 1]}, "filters": 32, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 4}, {"class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 5}, {"class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "dtype": "float32", "filters": 64, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 6}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 7}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 8}, {"class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_1", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 9}, {"class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 10}, {"class_name": "Conv2D", "config": {"name": "conv2d_2", "trainable": true, "dtype": "float32", "filters": 64, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 11}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 12}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 13}, {"class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 14}, {"class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 64, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 15}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 16}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 17}, {"class_name": "Dropout", "config": {"name": "dropout_2", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 18}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 32, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 19}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 20}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 21}, {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 4, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 22}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 23}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 24}]}}, "training_config": {"loss": {"class_name": "SparseCategoricalCrossentropy", "config": {"reduction": "auto", "name": "sparse_categorical_crossentropy", "from_logits": true, "ignore_class": null, "fn": "sparse_categorical_crossentropy"}, "shared_object_id": 27}, "metrics": [[{"class_name": "MeanMetricWrapper", "config": {"name": "accuracy", "dtype": "float32", "fn": "sparse_categorical_accuracy"}, "shared_object_id": 28}]], "weighted_metrics": null, "loss_weights": null, "optimizer_config": {"class_name": "Adam", "config": {"name": "Adam", "learning_rate": 0.0010000000474974513, "decay": 0.0, "beta_1": 0.8999999761581421, "beta_2": 0.9990000128746033, "epsilon": 1e-07, "amsgrad": false}}}}2
+�root.layer_with_weights-0"_tf_keras_layer*�
+{"name": "conv2d", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 128, 44, 1]}, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Conv2D", "config": {"name": "conv2d", "trainable": true, "dtype": "float32", "batch_input_shape": {"class_name": "__tuple__", "items": [null, 128, 44, 1]}, "filters": 32, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 1}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 2}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 3, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 1}}, "shared_object_id": 29}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 128, 44, 1]}}2
+�root.layer-1"_tf_keras_layer*�{"name": "max_pooling2d", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "MaxPooling2D", "config": {"name": "max_pooling2d", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 4, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}, "shared_object_id": 30}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 126, 42, 32]}}2
+�root.layer-2"_tf_keras_layer*�{"name": "dropout", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Dropout", "config": {"name": "dropout", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 5, "build_input_shape": {"class_name": "TensorShape", "items": [null, 63, 21, 32]}}2
+�
+root.layer_with_weights-1"_tf_keras_layer*�	{"name": "conv2d_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Conv2D", "config": {"name": "conv2d_1", "trainable": true, "dtype": "float32", "filters": 64, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 6}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 7}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 8, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 32}}, "shared_object_id": 31}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 63, 21, 32]}}2
+�root.layer-4"_tf_keras_layer*�{"name": "max_pooling2d_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "MaxPooling2D", "config": {"name": "max_pooling2d_1", "trainable": true, "dtype": "float32", "pool_size": {"class_name": "__tuple__", "items": [2, 2]}, "padding": "valid", "strides": {"class_name": "__tuple__", "items": [2, 2]}, "data_format": "channels_last"}, "shared_object_id": 9, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": 4, "max_ndim": null, "min_ndim": null, "axes": {}}, "shared_object_id": 32}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 61, 19, 64]}}2
+�root.layer-5"_tf_keras_layer*�{"name": "dropout_1", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Dropout", "config": {"name": "dropout_1", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 10, "build_input_shape": {"class_name": "TensorShape", "items": [null, 30, 9, 64]}}2
+�
+root.layer_with_weights-2"_tf_keras_layer*�	{"name": "conv2d_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Conv2D", "config": {"name": "conv2d_2", "trainable": true, "dtype": "float32", "filters": 64, "kernel_size": {"class_name": "__tuple__", "items": [3, 3]}, "strides": {"class_name": "__tuple__", "items": [1, 1]}, "padding": "valid", "data_format": "channels_last", "dilation_rate": {"class_name": "__tuple__", "items": [1, 1]}, "groups": 1, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 11}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 12}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 13, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 4, "axes": {"-1": 64}}, "shared_object_id": 33}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 30, 9, 64]}}2
+�root.layer-7"_tf_keras_layer*�{"name": "flatten", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Flatten", "config": {"name": "flatten", "trainable": true, "dtype": "float32", "data_format": "channels_last"}, "shared_object_id": 14, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 1, "axes": {}}, "shared_object_id": 34}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 28, 7, 64]}}2
+�	root.layer_with_weights-3"_tf_keras_layer*�{"name": "dense", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Dense", "config": {"name": "dense", "trainable": true, "dtype": "float32", "units": 64, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 15}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 16}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 17, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 12544}}, "shared_object_id": 35}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 12544]}}2
+�
+root.layer-9"_tf_keras_layer*�{"name": "dropout_2", "trainable": true, "expects_training_arg": true, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Dropout", "config": {"name": "dropout_2", "trainable": true, "dtype": "float32", "rate": 0.2, "noise_shape": null, "seed": null}, "shared_object_id": 18, "build_input_shape": {"class_name": "TensorShape", "items": [null, 64]}}2
+�root.layer_with_weights-4"_tf_keras_layer*�{"name": "dense_1", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "dtype": "float32", "units": 32, "activation": "relu", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 19}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 20}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 21, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 64}}, "shared_object_id": 36}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 64]}}2
+�root.layer_with_weights-5"_tf_keras_layer*�{"name": "dense_2", "trainable": true, "expects_training_arg": false, "dtype": "float32", "batch_input_shape": null, "stateful": false, "must_restore_from_config": false, "preserve_input_structure_in_config": false, "autocast": true, "class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 4, "activation": "softmax", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}, "shared_object_id": 22}, "bias_initializer": {"class_name": "Zeros", "config": {}, "shared_object_id": 23}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}, "shared_object_id": 24, "input_spec": {"class_name": "InputSpec", "config": {"dtype": null, "shape": null, "ndim": null, "max_ndim": null, "min_ndim": 2, "axes": {"-1": 32}}, "shared_object_id": 37}, "build_input_shape": {"class_name": "TensorShape", "items": [null, 32]}}2
+��root.keras_api.metrics.0"_tf_keras_metric*�{"class_name": "Mean", "name": "loss", "dtype": "float32", "config": {"name": "loss", "dtype": "float32"}, "shared_object_id": 38}2
+��root.keras_api.metrics.1"_tf_keras_metric*�{"class_name": "MeanMetricWrapper", "name": "accuracy", "dtype": "float32", "config": {"name": "accuracy", "dtype": "float32", "fn": "sparse_categorical_accuracy"}, "shared_object_id": 28}2
\ No newline at end of file
diff --git a/myproject/models/instrument_model/1/saved_model.pb b/myproject/models/instrument_model/1/saved_model.pb
new file mode 100644
index 0000000000000000000000000000000000000000..17ff0d94c083b07b5eb7f1a9348cfb36fa15d532
Binary files /dev/null and b/myproject/models/instrument_model/1/saved_model.pb differ
diff --git a/myproject/models/instrument_model/1/variables/variables.data-00000-of-00001 b/myproject/models/instrument_model/1/variables/variables.data-00000-of-00001
new file mode 100644
index 0000000000000000000000000000000000000000..ad1698fc39af144e83ea1bf207d1908eb51d22c4
Binary files /dev/null and b/myproject/models/instrument_model/1/variables/variables.data-00000-of-00001 differ
diff --git a/myproject/models/instrument_model/1/variables/variables.index b/myproject/models/instrument_model/1/variables/variables.index
new file mode 100644
index 0000000000000000000000000000000000000000..6a8d3e1a107e9ba3b6a210b1af5d176f97f9ef14
Binary files /dev/null and b/myproject/models/instrument_model/1/variables/variables.index differ
diff --git a/myproject/myapp/__pycache__/__init__.cpython-310.pyc b/myproject/myapp/__pycache__/__init__.cpython-310.pyc
index a599ed25ee03d644228f85ccee265270f04c19bb..90e1f184c1d2610e7cb73615936201cc4d1003a7 100644
Binary files a/myproject/myapp/__pycache__/__init__.cpython-310.pyc and b/myproject/myapp/__pycache__/__init__.cpython-310.pyc differ
diff --git a/myproject/myapp/__pycache__/apps.cpython-310.pyc b/myproject/myapp/__pycache__/apps.cpython-310.pyc
index 1e73d400192b6ce43f63230e39c8d3eaedcbfa38..78e9148825a43e1980af163b97f9be57b98d0b2e 100644
Binary files a/myproject/myapp/__pycache__/apps.cpython-310.pyc and b/myproject/myapp/__pycache__/apps.cpython-310.pyc differ
diff --git a/myproject/myapp/audio_preprocessing.py b/myproject/myapp/audio_preprocessing.py
new file mode 100644
index 0000000000000000000000000000000000000000..2e6de553484fb36ec3732fa33a82da7c8f553035
--- /dev/null
+++ b/myproject/myapp/audio_preprocessing.py
@@ -0,0 +1,63 @@
+import librosa
+import numpy as np
+import requests
+import json
+
+def get_windows(audio, window_size=22050):
+    start = 0
+    windows = []
+    audio_len = len(audio)
+    while start < audio_len:
+        if start + window_size > audio_len:
+            break
+        window_end = int(start + window_size)
+        windows.append(audio[start:window_end])
+        start += int(window_size / 2)
+    return windows
+
+def preprocess_audio_for_inference(audio_path):
+    audio, sr = librosa.load(audio_path, sr=22050)
+    windows = get_windows(audio)
+    preprocessed_windows = []
+    for window in windows:
+        mel = librosa.feature.melspectrogram(y=window, sr=sr)
+        mel_db = librosa.power_to_db(mel, ref=np.max)
+        # Ensure the shape matches your model's expected input
+        mel_db_resized = np.resize(mel_db, (128, 44))
+        mel_db_resized = np.expand_dims(mel_db_resized, axis=-1)  # Adding the channel dimension
+        preprocessed_windows.append(mel_db_resized)
+    return preprocessed_windows
+
+# Preprocess your audio file
+audio_path = './static/src/media/Casio Piano C5 1980s.wav'  # Update this path
+preprocessed_data = preprocess_audio_for_inference(audio_path)
+
+# print(f"Number of windows: {len(preprocessed_data)}")
+# print(f"Value array: {preprocessed_data[0]}")
+
+# Write preprocessed data values to a text file
+# with open('G53_data.txt', 'w') as file:
+#     for window in preprocessed_data:
+#         for value in window.flatten():
+#             file.write(str(value) + '\n')
+# print("Preprocessed data values written to preprocessed_data.txt")
+
+
+# TensorFlow Serving URL
+url = 'http://localhost:8501/v1/models/instrument_model:predict'
+
+# Prepare data for TensorFlow Serving
+data = json.dumps({"signature_name": "serving_default", "instances": [window.tolist() for window in preprocessed_data]})
+
+# Send request
+headers = {"Content-Type": "application/json"}
+response = requests.post(url, data=data, headers=headers)
+
+# Process response
+if response.status_code == 200:
+    predictions = response.json()['predictions']
+    # Process your predictions as needed
+    print(predictions)
+else:
+    print(f"Failed to get predictions, status code: {response.status_code}, response text: {response.text}")
+
diff --git a/myproject/myapp/forms.py b/myproject/myapp/forms.py
index 8391495832258992c1d6540a7c25906897550da8..57f77dcfaeddf2e1b9e333f18d26456c77c6625f 100644
--- a/myproject/myapp/forms.py
+++ b/myproject/myapp/forms.py
@@ -1,3 +1,4 @@
+<<<<<<< myproject/myapp/forms.py
 from django import forms
 from django.contrib.auth.forms import UserCreationForm 
 from django.contrib.auth.models import User
@@ -13,4 +14,18 @@ class CustomRegistrationForm(UserCreationForm):
 
 class LoginForm(forms.Form):
     username = forms.CharField()
-    password = forms.CharField(widget=forms.PasswordInput)
\ No newline at end of file
+    password = forms.CharField(widget=forms.PasswordInput)
+
+class InstrumentDetectionForm(forms.Form):
+    audio_file = forms.FileField(
+        label='Select an audio file',
+        widget=forms.ClearableFileInput(attrs={
+            'class': 'block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400',
+            'id': 'audio_file',
+            'name': 'audio_file',
+            'accept': '.mp3,.wav',
+            'onchange': 'loadAudioFile(event)'
+        })
+    )
+
+
diff --git a/myproject/myapp/migrations/0001_initial.py b/myproject/myapp/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..8bf97a1828c19c6390cd48e0d5fe71fede0807d9
--- /dev/null
+++ b/myproject/myapp/migrations/0001_initial.py
@@ -0,0 +1,21 @@
+# Generated by Django 5.0.1 on 2024-03-04 13:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Audio',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('file', models.FileField(upload_to='audio', verbose_name='audio')),
+            ],
+        ),
+    ]
diff --git a/myproject/myapp/migrations/0002_log.py b/myproject/myapp/migrations/0002_log.py
new file mode 100644
index 0000000000000000000000000000000000000000..10c6dc9b99983db43bec5458604bc8771a213d3f
--- /dev/null
+++ b/myproject/myapp/migrations/0002_log.py
@@ -0,0 +1,25 @@
+# Generated by Django 5.0.1 on 2024-03-11 06:11
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('myapp', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Log',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('date', models.DateTimeField(auto_now_add=True)),
+                ('log', models.JSONField()),
+                ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+    ]
diff --git a/myproject/myapp/models.py b/myproject/myapp/models.py
index 5fdd11c5901e3138d22c26089ea4facf783976ed..f61b35dc0b7786e576c90f0f5e481fc4991e0552 100644
--- a/myproject/myapp/models.py
+++ b/myproject/myapp/models.py
@@ -2,6 +2,7 @@ from django.db import models
 from django.contrib.auth import get_user_model
 from django.contrib.auth.models import User, Group, Permission 
 from django.contrib.contenttypes.models import ContentType
+from enum import Enum
 
 # class UserTypes(User):
 #     USER_TYPE_CHOICES = (
@@ -32,55 +33,33 @@ from django.contrib.contenttypes.models import ContentType
 #names are not necessary - reduces gdpr concerns aswell
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-#   Usertypes
-#   ---------
-#   0 - Basic User
-#   1 - Admin
-#   2 - ML Engineer
-#   3 - Accountant
-
-# Create your models here.
-# class User(models.Model):
-#     """
-#     *   User model
-#     """
-#     username = models.CharField(max_length=150)
-#     password = models.CharField(max_length=16)
-#     email = models.EmailField(max_length=200)
-#     #usertype = models.ForeignKey("UserType")
-
-# class UserType(models.Model):
-#     """
-#     *   Usertype model
-#     """
-#     usertype = models.CharField(max_length=15)
+class Action(Enum):
+    UPLOAD_FILE = 'upload_file'
+    LOGIN = 'login'
+    REGISTER = 'register'
+    PAYMENT = 'payment'
+    GENERATE_FINANCIAL_STATEMENT = 'generate_financial_statement'
+    CHANGE_MLA = 'change_MLA'
+    RUN_ALGORITHM = 'run_algorithm'
+    INVALID_FILE = 'invalid_file'
+    INVALID_PASSWORD = 'invalid_password'
+    USER_DOES_NOT_EXIST = 'user_does_not_exist'
+    DOWNLOAD_BREAKDOWN = 'download_breakdown'
+    UNKNOWN = 'unknown'
 
 # class Logs(models.Model):
 #     """
 #     *   Logs model
 #     """
-#     content = models.CharField(max_length=2000)
-#     #user_id = models.ForeignKey("User")
+#     user_id = models.ForeignKey("User", on_delete=models.CASCADE)
+#     error_id = models.IntegerField()
 #     date = models.DateTimeField()
 
 # class Feedback(models.Model):
 #     """
 #     *   Feedback Model
 #     """
-#     #user_id = models.ForeignKey("User")
+#     user_id = models.ForeignKey("User", on_delete=models.CASCADE)
 #     content = models.CharField(max_length=2000)
 #     date = models.DateTimeField()
 
@@ -88,7 +67,36 @@ from django.contrib.contenttypes.models import ContentType
 #     """
 #     *   Bill/receipts Model
 #     """
-#     #user_id = models.ForeignKey("User")
+#     user_id = models.ForeignKey("User", on_delete=models.CASCADE)
 #     date = models.DateTimeField()
 #     paid = models.BooleanField(default=False)
 
+
+# class Files(models.Model):
+#     """
+#     *   Uploaded files
+#     """
+#     date = models.DateTimeField()
+#     data = models.CharField(max_length=2000)
+#     uploader = models.ForeignKey("User", on_delete=models.CASCADE)
+
+class Audio(models.Model):
+    file = models.FileField('audio', upload_to='audio')
+
+class Log(models.Model):
+    date = models.DateTimeField(auto_now_add=True)
+    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
+    log = models.JSONField()
+
+# # LOGIN
+# log_data = get_log_data(Action.LOGIN, 'success', user=request.user.username)
+# create_log(log_data)
+# # REGISTER
+# log_data = get_log_data(Action.REGISTER, 'success', user=request.user.username)
+# create_log(log_data)
+# # INVALID_PASSWORD
+# log_data = get_log_data(Action.INVALID_PASSWORD, 'error', user=request.user.username)
+# create_log(log_data)
+# # GENERATE_FINANCIAL_STATEMENT
+# log_data = get_log_data(Action.GENERATE_FINANCIAL_STATEMENT, 'success', user=request.user.username)
+# create_log(log_data)
diff --git a/myproject/myapp/receipts.py b/myproject/myapp/receipts.py
new file mode 100644
index 0000000000000000000000000000000000000000..1194d56808eb17a228a1095f00a7350ee0a8d5fc
--- /dev/null
+++ b/myproject/myapp/receipts.py
@@ -0,0 +1,8 @@
+# We want to generate receipts for user monthly billing.
+# We want the function to accept a user
+# It should return the user's username, blanked out details and cost
+from fpdf import FPDF
+
+class PDF(FPDF):
+    pass # do nothing when it's executed
+
diff --git a/myproject/myapp/static/src/media/Casio Piano C5 1980s.wav b/myproject/myapp/static/src/media/Casio Piano C5 1980s.wav
new file mode 100644
index 0000000000000000000000000000000000000000..eeaff44f12dd2cfb3f450cf4a80a815443f0b3b3
Binary files /dev/null and b/myproject/myapp/static/src/media/Casio Piano C5 1980s.wav differ
diff --git a/myproject/myapp/static/src/media/G53-44104-1111-00083.wav b/myproject/myapp/static/src/media/G53-44104-1111-00083.wav
new file mode 100644
index 0000000000000000000000000000000000000000..16db7104451f5e6bf8f9129cca860dc084db1789
Binary files /dev/null and b/myproject/myapp/static/src/media/G53-44104-1111-00083.wav differ
diff --git a/myproject/myapp/static/src/output.css b/myproject/myapp/static/src/output.css
index e380ea87e2f3086a5fa9aa475b90eff9416fb1e5..1c6a6f123e523ef695f2d058bef67ba0f4820da8 100644
--- a/myproject/myapp/static/src/output.css
+++ b/myproject/myapp/static/src/output.css
@@ -1146,14 +1146,6 @@ input:checked + .toggle-bg {
   margin-left: -0.25rem;
 }
 
-.mb-0 {
-  margin-bottom: 0px;
-}
-
-.mb-0\.5 {
-  margin-bottom: 0.125rem;
-}
-
 .mb-1 {
   margin-bottom: 0.25rem;
 }
@@ -1174,22 +1166,10 @@ input:checked + .toggle-bg {
   margin-bottom: 1.25rem;
 }
 
-.mb-6 {
-  margin-bottom: 1.5rem;
-}
-
-.ml-1 {
-  margin-left: 0.25rem;
-}
-
 .mr-2 {
   margin-right: 0.5rem;
 }
 
-.mr-2\.5 {
-  margin-right: 0.625rem;
-}
-
 .mr-3 {
   margin-right: 0.75rem;
 }
@@ -1202,14 +1182,6 @@ input:checked + .toggle-bg {
   margin-top: 1rem;
 }
 
-.mt-6 {
-  margin-top: 1.5rem;
-}
-
-.mt-1 {
-  margin-top: 0.25rem;
-}
-
 .block {
   display: block;
 }
@@ -1234,10 +1206,6 @@ input:checked + .toggle-bg {
   display: table;
 }
 
-.flow-root {
-  display: flow-root;
-}
-
 .grid {
   display: grid;
 }
@@ -1290,10 +1258,6 @@ input:checked + .toggle-bg {
   width: 2.5rem;
 }
 
-.w-11 {
-  width: 2.75rem;
-}
-
 .w-28 {
   width: 7rem;
 }
@@ -1306,10 +1270,6 @@ input:checked + .toggle-bg {
   width: 1.25rem;
 }
 
-.w-6 {
-  width: 1.5rem;
-}
-
 .w-64 {
   width: 16rem;
 }
@@ -1318,18 +1278,10 @@ input:checked + .toggle-bg {
   width: 18rem;
 }
 
-.w-auto {
-  width: auto;
-}
-
 .w-full {
   width: 100%;
 }
 
-.min-w-0 {
-  min-width: 0px;
-}
-
 .max-w-screen-xl {
   max-width: 1280px;
 }
@@ -1342,14 +1294,6 @@ input:checked + .toggle-bg {
   flex-shrink: 1;
 }
 
-.flex-shrink-0 {
-  flex-shrink: 0;
-}
-
-.flex-grow {
-  flex-grow: 1;
-}
-
 .-translate-x-full {
   --tw-translate-x: -100%;
   transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
@@ -1464,12 +1408,6 @@ input:checked + .toggle-bg {
   gap: 1.5rem;
 }
 
-.space-x-1 > :not([hidden]) ~ :not([hidden]) {
-  --tw-space-x-reverse: 0;
-  margin-right: calc(0.25rem * var(--tw-space-x-reverse));
-  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
-}
-
 .space-x-2 > :not([hidden]) ~ :not([hidden]) {
   --tw-space-x-reverse: 0;
   margin-right: calc(0.5rem * var(--tw-space-x-reverse));
@@ -1500,17 +1438,6 @@ input:checked + .toggle-bg {
   margin-bottom: calc(1rem * var(--tw-space-y-reverse));
 }
 
-.divide-y > :not([hidden]) ~ :not([hidden]) {
-  --tw-divide-y-reverse: 0;
-  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
-  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
-}
-
-.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {
-  --tw-divide-opacity: 1;
-  border-color: rgb(229 231 235 / var(--tw-divide-opacity));
-}
-
 .self-center {
   align-self: center;
 }
@@ -1519,12 +1446,6 @@ input:checked + .toggle-bg {
   overflow: hidden;
 }
 
-.truncate {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
 .whitespace-nowrap {
   white-space: nowrap;
 }
@@ -1602,6 +1523,11 @@ input:checked + .toggle-bg {
   border-color: rgb(209 213 219 / var(--tw-border-opacity));
 }
 
+.bg-blue-500 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(63 131 248 / var(--tw-bg-opacity));
+}
+
 .bg-blue-700 {
   --tw-bg-opacity: 1;
   background-color: rgb(26 86 219 / var(--tw-bg-opacity));
@@ -1631,6 +1557,11 @@ input:checked + .toggle-bg {
   background-color: rgb(17 24 39 / 0.5);
 }
 
+.bg-green-500 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(14 159 110 / var(--tw-bg-opacity));
+}
+
 .bg-orange-300 {
   --tw-bg-opacity: 1;
   background-color: rgb(253 186 140 / var(--tw-bg-opacity));
@@ -1650,16 +1581,6 @@ input:checked + .toggle-bg {
   background-color: rgb(255 255 255 / 0.5);
 }
 
-.bg-blue-500 {
-  --tw-bg-opacity: 1;
-  background-color: rgb(63 131 248 / var(--tw-bg-opacity));
-}
-
-.bg-green-500 {
-  --tw-bg-opacity: 1;
-  background-color: rgb(14 159 110 / var(--tw-bg-opacity));
-}
-
 .p-1 {
   padding: 0.25rem;
 }
@@ -1725,18 +1646,10 @@ input:checked + .toggle-bg {
   padding-bottom: 1rem;
 }
 
-.pb-6 {
-  padding-bottom: 1.5rem;
-}
-
 .pt-2 {
   padding-top: 0.5rem;
 }
 
-.pt-4 {
-  padding-top: 1rem;
-}
-
 .pt-6 {
   padding-top: 1.5rem;
 }
@@ -1816,10 +1729,6 @@ input:checked + .toggle-bg {
   line-height: 2.25rem;
 }
 
-.leading-none {
-  line-height: 1;
-}
-
 .leading-tight {
   line-height: 1.25;
 }
@@ -1829,14 +1738,14 @@ input:checked + .toggle-bg {
   color: rgb(28 100 242 / var(--tw-text-opacity));
 }
 
-.text-gray-300 {
+.text-blue-700 {
   --tw-text-opacity: 1;
-  color: rgb(209 213 219 / var(--tw-text-opacity));
+  color: rgb(26 86 219 / var(--tw-text-opacity));
 }
 
-.text-gray-400 {
+.text-gray-300 {
   --tw-text-opacity: 1;
-  color: rgb(156 163 175 / var(--tw-text-opacity));
+  color: rgb(209 213 219 / var(--tw-text-opacity));
 }
 
 .text-gray-500 {
@@ -1844,6 +1753,11 @@ input:checked + .toggle-bg {
   color: rgb(107 114 128 / var(--tw-text-opacity));
 }
 
+.text-gray-600 {
+  --tw-text-opacity: 1;
+  color: rgb(75 85 99 / var(--tw-text-opacity));
+}
+
 .text-gray-700 {
   --tw-text-opacity: 1;
   color: rgb(55 65 81 / var(--tw-text-opacity));
@@ -1874,26 +1788,6 @@ input:checked + .toggle-bg {
   color: rgb(255 255 255 / var(--tw-text-opacity));
 }
 
-.text-gray-100 {
-  --tw-text-opacity: 1;
-  color: rgb(243 244 246 / var(--tw-text-opacity));
-}
-
-.text-gray-200 {
-  --tw-text-opacity: 1;
-  color: rgb(229 231 235 / var(--tw-text-opacity));
-}
-
-.text-blue-700 {
-  --tw-text-opacity: 1;
-  color: rgb(26 86 219 / var(--tw-text-opacity));
-}
-
-.text-gray-600 {
-  --tw-text-opacity: 1;
-  color: rgb(75 85 99 / var(--tw-text-opacity));
-}
-
 .opacity-0 {
   opacity: 0;
 }
@@ -1976,6 +1870,11 @@ input:checked + .toggle-bg {
   border-color: rgb(209 213 219 / var(--tw-border-opacity));
 }
 
+.hover\:bg-blue-600:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(28 100 242 / var(--tw-bg-opacity));
+}
+
 .hover\:bg-blue-800:hover {
   --tw-bg-opacity: 1;
   background-color: rgb(30 66 159 / var(--tw-bg-opacity));
@@ -1986,19 +1885,14 @@ input:checked + .toggle-bg {
   background-color: rgb(243 244 246 / var(--tw-bg-opacity));
 }
 
-.hover\:bg-white:hover {
-  --tw-bg-opacity: 1;
-  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
-}
-
-.hover\:bg-blue-600:hover {
+.hover\:bg-green-600:hover {
   --tw-bg-opacity: 1;
-  background-color: rgb(28 100 242 / var(--tw-bg-opacity));
+  background-color: rgb(5 122 85 / var(--tw-bg-opacity));
 }
 
-.hover\:bg-green-600:hover {
+.hover\:bg-white:hover {
   --tw-bg-opacity: 1;
-  background-color: rgb(5 122 85 / var(--tw-bg-opacity));
+  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
 }
 
 .hover\:text-blue-600:hover {
@@ -2066,11 +1960,6 @@ input:checked + .toggle-bg {
   --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));
 }
 
-:is(.dark .dark\:divide-gray-700) > :not([hidden]) ~ :not([hidden]) {
-  --tw-divide-opacity: 1;
-  border-color: rgb(55 65 81 / var(--tw-divide-opacity));
-}
-
 :is(.dark .dark\:border-blue-500) {
   --tw-border-opacity: 1;
   border-color: rgb(63 131 248 / var(--tw-border-opacity));
@@ -2143,11 +2032,6 @@ input:checked + .toggle-bg {
   color: rgb(156 163 175 / var(--tw-text-opacity));
 }
 
-:is(.dark .dark\:text-gray-500) {
-  --tw-text-opacity: 1;
-  color: rgb(107 114 128 / var(--tw-text-opacity));
-}
-
 :is(.dark .dark\:text-green-500) {
   --tw-text-opacity: 1;
   color: rgb(14 159 110 / var(--tw-text-opacity));
@@ -2223,6 +2107,11 @@ input:checked + .toggle-bg {
   --tw-ring-color: rgb(63 131 248 / var(--tw-ring-opacity));
 }
 
+:is(.dark .dark\:focus\:ring-blue-800:focus) {
+  --tw-ring-opacity: 1;
+  --tw-ring-color: rgb(30 66 159 / var(--tw-ring-opacity));
+}
+
 :is(.dark .dark\:focus\:ring-gray-600:focus) {
   --tw-ring-opacity: 1;
   --tw-ring-color: rgb(75 85 99 / var(--tw-ring-opacity));
@@ -2233,11 +2122,6 @@ input:checked + .toggle-bg {
   --tw-ring-color: rgb(55 65 81 / var(--tw-ring-opacity));
 }
 
-:is(.dark .dark\:focus\:ring-blue-800:focus) {
-  --tw-ring-opacity: 1;
-  --tw-ring-color: rgb(30 66 159 / var(--tw-ring-opacity));
-}
-
 @media (min-width: 640px) {
   .sm\:col-span-3 {
     grid-column: span 3 / span 3;
@@ -2278,10 +2162,6 @@ input:checked + .toggle-bg {
 }
 
 @media (min-width: 768px) {
-  .md\:ml-2 {
-    margin-left: 0.5rem;
-  }
-
   .md\:mt-0 {
     margin-top: 0px;
   }
@@ -2310,12 +2190,6 @@ input:checked + .toggle-bg {
     flex-direction: row;
   }
 
-  .md\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
-    --tw-space-x-reverse: 0;
-    margin-right: calc(0.5rem * var(--tw-space-x-reverse));
-    margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
-  }
-
   .md\:space-x-8 > :not([hidden]) ~ :not([hidden]) {
     --tw-space-x-reverse: 0;
     margin-right: calc(2rem * var(--tw-space-x-reverse));
@@ -2390,10 +2264,6 @@ input:checked + .toggle-bg {
     grid-column: auto;
   }
 
-  .xl\:mb-0 {
-    margin-bottom: 0px;
-  }
-
   .xl\:mb-2 {
     margin-bottom: 0.5rem;
   }
@@ -2406,18 +2276,10 @@ input:checked + .toggle-bg {
     display: block;
   }
 
-  .xl\:w-full {
-    width: 100%;
-  }
-
   .xl\:max-w-4xl {
     max-width: 56rem;
   }
 
-  .xl\:grid-cols-2 {
-    grid-template-columns: repeat(2, minmax(0, 1fr));
-  }
-
   .xl\:grid-cols-3 {
     grid-template-columns: repeat(3, minmax(0, 1fr));
   }
@@ -2451,10 +2313,6 @@ input:checked + .toggle-bg {
     display: flex;
   }
 
-  .\32xl\:w-auto {
-    width: auto;
-  }
-
   .\32xl\:space-x-4 > :not([hidden]) ~ :not([hidden]) {
     --tw-space-x-reverse: 0;
     margin-right: calc(1rem * var(--tw-space-x-reverse));
diff --git a/myproject/myapp/templates/_base.html b/myproject/myapp/templates/_base.html
index ed5dab0845c94306eac423e69a3628ecc0307fb1..c7cc36d4c38097ecd5f55efe699670f5a1234528 100644
--- a/myproject/myapp/templates/_base.html
+++ b/myproject/myapp/templates/_base.html
@@ -12,7 +12,7 @@
   </head>
 
   <body>
-    <nav class="bg-white border-gray-200 dark:bg-gray-900">
+    <nav class=" border-gray-200 dark:bg-gray-900">
       <div
         class="max-w-screen-xl flex flex-wrap items-center justify-between mx-auto p-4"
       >
@@ -72,7 +72,7 @@
             </li>
             <li>
               <a
-                href="#"
+                href="{% url 'pricing' %}"
                 class="block py-2 px-3 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:border-0 md:hover:text-blue-700 md:p-0 dark:text-white md:dark:hover:text-blue-500 dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent"
                 >Pricing</a
               >
@@ -88,87 +88,87 @@
         </div>
       </div>
     </nav>
-    <div class="container mx-auto mt-4">
+    <div class="container mx-auto mt-6">
       {% block content %} {% endblock content %}
+      
     </div>
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.3.0/flowbite.min.js"></script>
-
-</body>
-
-<footer class="bg-white dark:bg-gray-900">
-    <div class="mx-auto w-full max-w-screen-xl p-4 py-6 lg:py-8">
-        <div class="md:flex md:justify-between">
-          <div class="mb-6 md:mb-0">
-                  <img src="https://upload.wikimedia.org/wikipedia/commons/1/11/UWE_Bristol_logo.svg" class="h-10 me-4" alt="UWE Logo" />
-              </a>
-          </div>
-          <div class="grid grid-cols-2 gap-5 sm:gap-6 sm:grid-cols-3">
-              <div>
-                  <h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase dark:text-white">Resources</h2>
-                  <ul class="text-gray-500 dark:text-gray-400 font-medium">
-                      <li class="mb-4">
-                          <a href="https://flowbite.com/" class="hover:underline">Flowbite</a>
-                      </li>
-                      <li>
-                          <a href="https://tailwindcss.com/" class="hover:underline">Tailwind CSS</a>
-                      </li>
-                  </ul>
-              </div>
-              <div>
-                  <h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase dark:text-white">Follow us</h2>
-                  <ul class="text-gray-500 dark:text-gray-400 font-medium">
-                      <li class="mb-4">
-                          <a href="#" class="hover:underline ">Github</a>
-                      </li>
-                      <li>
-                          <a href="#" class="hover:underline">Discord</a>
-                      </li>
-                  </ul>
-              </div>
-              <div>
-                  <h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase dark:text-white">Legal</h2>
-                  <ul class="text-gray-500 dark:text-gray-400 font-medium">
-                      <li class="mb-4">
-                          <a href="#" class="hover:underline">Privacy Policy</a>
-                      </li>
-                      <li>
-                          <a href="#" class="hover:underline">Terms &amp; Conditions</a>
-                      </li>
-                  </ul>
-              </div>
-          </div>
-      </div>
-      <hr class="my-6 border-gray-200 sm:mx-auto dark:border-gray-700 lg:my-8" />
-      <div class="sm:flex sm:items-center sm:justify-between">
-          <span class="text-sm text-gray-500 sm:text-center dark:text-gray-400">© 2024 <a href="https://flowbite.com/" class="hover:underline">DESD Group 25</a>. All Rights Reserved.
-          </span>
-          <div class="flex mt-4 sm:justify-center sm:mt-0">
-              {% comment %} <a href="#" class="text-gray-500 hover:text-gray-900 dark:hover:text-white">
-                  <svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 8 19">
-                        <path fill-rule="evenodd" d="M6.135 3H8V0H6.135a4.147 4.147 0 0 0-4.142 4.142V6H0v3h2v9.938h3V9h2.021l.592-3H5V3.591A.6.6 0 0 1 5.592 3h.543Z" clip-rule="evenodd"/>
-                    </svg> {% endcomment %}
-                  <span class="sr-only">Facebook page</span>
-              </a>
-              {% comment %} <a href="#" class="text-gray-500 hover:text-gray-900 dark:hover:text-white ms-5">
-                  <svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 21 16">
-                        <path d="M16.942 1.556a16.3 16.3 0 0 0-4.126-1.3 12.04 12.04 0 0 0-.529 1.1 15.175 15.175 0 0 0-4.573 0 11.585 11.585 0 0 0-.535-1.1 16.274 16.274 0 0 0-4.129 1.3A17.392 17.392 0 0 0 .182 13.218a15.785 15.785 0 0 0 4.963 2.521c.41-.564.773-1.16 1.084-1.785a10.63 10.63 0 0 1-1.706-.83c.143-.106.283-.217.418-.33a11.664 11.664 0 0 0 10.118 0c.137.113.277.224.418.33-.544.328-1.116.606-1.71.832a12.52 12.52 0 0 0 1.084 1.785 16.46 16.46 0 0 0 5.064-2.595 17.286 17.286 0 0 0-2.973-11.59ZM6.678 10.813a1.941 1.941 0 0 1-1.8-2.045 1.93 1.93 0 0 1 1.8-2.047 1.919 1.919 0 0 1 1.8 2.047 1.93 1.93 0 0 1-1.8 2.045Zm6.644 0a1.94 1.94 0 0 1-1.8-2.045 1.93 1.93 0 0 1 1.8-2.047 1.918 1.918 0 0 1 1.8 2.047 1.93 1.93 0 0 1-1.8 2.045Z"/>
-                    </svg> {% endcomment %}
-                  <span class="sr-only">Discord</span>
-              </a>
-              {% comment %} <a href="#" class="text-gray-500 hover:text-gray-900 dark:hover:text-white ms-5">
-                  <svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 17">
-                    <path fill-rule="evenodd" d="M20 1.892a8.178 8.178 0 0 1-2.355.635 4.074 4.074 0 0 0 1.8-2.235 8.344 8.344 0 0 1-2.605.98A4.13 4.13 0 0 0 13.85 0a4.068 4.068 0 0 0-4.1 4.038 4 4 0 0 0 .105.919A11.705 11.705 0 0 1 1.4.734a4.006 4.006 0 0 0 1.268 5.392 4.165 4.165 0 0 1-1.859-.5v.05A4.057 4.057 0 0 0 4.1 9.635a4.19 4.19 0 0 1-1.856.07 4.108 4.108 0 0 0 3.831 2.807A8.36 8.36 0 0 1 0 14.184 11.732 11.732 0 0 0 6.291 16 11.502 11.502 0 0 0 17.964 4.5c0-.177 0-.35-.012-.523A8.143 8.143 0 0 0 20 1.892Z" clip-rule="evenodd"/>
-                </svg> {% endcomment %}
-                  <span class="sr-only">Twitter page</span>
-              </a>
-              <a href="#" class="text-gray-500 hover:text-gray-900 dark:hover:text-white ms-5">
-                {% comment %} <svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
-                        <path fill-rule="evenodd" d="M10 .333A9.911 9.911 0 0 0 6.866 19.65c.5.092.678-.215.678-.477 0-.237-.01-1.017-.014-1.845-2.757.6-3.338-1.169-3.338-1.169a2.627 2.627 0 0 0-1.1-1.451c-.9-.615.07-.6.07-.6a2.084 2.084 0 0 1 1.518 1.021 2.11 2.11 0 0 0 2.884.823c.044-.503.268-.973.63-1.325-2.2-.25-4.516-1.1-4.516-4.9A3.832 3.832 0 0 1 4.7 7.068a3.56 3.56 0 0 1 .095-2.623s.832-.266 2.726 1.016a9.409 9.409 0 0 1 4.962 0c1.89-1.282 2.717-1.016 2.717-1.016.366.83.402 1.768.1 2.623a3.827 3.827 0 0 1 1.02 2.659c0 3.807-2.319 4.644-4.525 4.889a2.366 2.366 0 0 1 .673 1.834c0 1.326-.012 2.394-.012 2.72 0 .263.18.572.681.475A9.911 9.911 0 0 0 10 .333Z" clip-rule="evenodd"/>
+    <!-- <footer class="bg-white dark:bg-gray-900 fixed bottom-0 w-full"> -->
+    <footer class="bg- dark:bg-gray-900 bottom-0 w-full mt-6">
+      <div class="mx-auto w-full max-w-screen-xl py-6 lg:py-8">
+          <div class="md:flex md:justify-between">
+            <div class="mb-2 md:mb-0">
+                    <img src="https://upload.wikimedia.org/wikipedia/commons/1/11/UWE_Bristol_logo.svg" class="h-10 me-4" alt="UWE Logo" />
+                </a>
+            </div>
+            <div class="grid grid-cols-2 gap-5 sm:gap-6 sm:grid-cols-3">
+                <div>
+                    <h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase dark:text-white">Resources</h2>
+                    <ul class="text-gray-500 dark:text-gray-400 font-medium">
+                        <li class="mb-4">
+                            <a href="https://flowbite.com/" class="hover:underline">Flowbite</a>
+                        </li>
+                        <li>
+                            <a href="https://tailwindcss.com/" class="hover:underline">Tailwind CSS</a>
+                        </li>
+                    </ul>
+                </div>
+                <div>
+                    <h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase dark:text-white">Follow us</h2>
+                    <ul class="text-gray-500 dark:text-gray-400 font-medium">
+                        <li class="mb-4">
+                            <a href="#" class="hover:underline ">Github</a>
+                        </li>
+                        <li>
+                            <a href="#" class="hover:underline">Discord</a>
+                        </li>
+                    </ul>
+                </div>
+                <div>
+                    <h2 class="mb-6 text-sm font-semibold text-gray-900 uppercase dark:text-white">Legal</h2>
+                    <ul class="text-gray-500 dark:text-gray-400 font-medium">
+                        <li class="mb-4">
+                            <a href="#" class="hover:underline">Privacy Policy</a>
+                        </li>
+                        <li>
+                            <a href="#" class="hover:underline">Terms &amp; Conditions</a>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+        <hr class="my-6 border-gray-200 sm:mx-auto dark:border-gray-700 lg:my-8" />
+        <div class="sm:flex sm:items-center sm:justify-between">
+            <span class="text-sm text-gray-500 sm:text-center dark:text-gray-400">© 2024 <a href="https://flowbite.com/" class="hover:underline">DESD Group 25</a>. All Rights Reserved.
+            </span>
+            <div class="flex mt-4 sm:justify-center sm:mt-0">
+                {% comment %} <a href="#" class="text-gray-500 hover:text-gray-900 dark:hover:text-white">
+                    <svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 8 19">
+                          <path fill-rule="evenodd" d="M6.135 3H8V0H6.135a4.147 4.147 0 0 0-4.142 4.142V6H0v3h2v9.938h3V9h2.021l.592-3H5V3.591A.6.6 0 0 1 5.592 3h.543Z" clip-rule="evenodd"/>
+                      </svg> {% endcomment %}
+                    <span class="sr-only">Facebook page</span>
+                </a>
+                {% comment %} <a href="#" class="text-gray-500 hover:text-gray-900 dark:hover:text-white ms-5">
+                    <svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 21 16">
+                          <path d="M16.942 1.556a16.3 16.3 0 0 0-4.126-1.3 12.04 12.04 0 0 0-.529 1.1 15.175 15.175 0 0 0-4.573 0 11.585 11.585 0 0 0-.535-1.1 16.274 16.274 0 0 0-4.129 1.3A17.392 17.392 0 0 0 .182 13.218a15.785 15.785 0 0 0 4.963 2.521c.41-.564.773-1.16 1.084-1.785a10.63 10.63 0 0 1-1.706-.83c.143-.106.283-.217.418-.33a11.664 11.664 0 0 0 10.118 0c.137.113.277.224.418.33-.544.328-1.116.606-1.71.832a12.52 12.52 0 0 0 1.084 1.785 16.46 16.46 0 0 0 5.064-2.595 17.286 17.286 0 0 0-2.973-11.59ZM6.678 10.813a1.941 1.941 0 0 1-1.8-2.045 1.93 1.93 0 0 1 1.8-2.047 1.919 1.919 0 0 1 1.8 2.047 1.93 1.93 0 0 1-1.8 2.045Zm6.644 0a1.94 1.94 0 0 1-1.8-2.045 1.93 1.93 0 0 1 1.8-2.047 1.918 1.918 0 0 1 1.8 2.047 1.93 1.93 0 0 1-1.8 2.045Z"/>
+                      </svg> {% endcomment %}
+                    <span class="sr-only">Discord</span>
+                </a>
+                {% comment %} <a href="#" class="text-gray-500 hover:text-gray-900 dark:hover:text-white ms-5">
+                    <svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 17">
+                      <path fill-rule="evenodd" d="M20 1.892a8.178 8.178 0 0 1-2.355.635 4.074 4.074 0 0 0 1.8-2.235 8.344 8.344 0 0 1-2.605.98A4.13 4.13 0 0 0 13.85 0a4.068 4.068 0 0 0-4.1 4.038 4 4 0 0 0 .105.919A11.705 11.705 0 0 1 1.4.734a4.006 4.006 0 0 0 1.268 5.392 4.165 4.165 0 0 1-1.859-.5v.05A4.057 4.057 0 0 0 4.1 9.635a4.19 4.19 0 0 1-1.856.07 4.108 4.108 0 0 0 3.831 2.807A8.36 8.36 0 0 1 0 14.184 11.732 11.732 0 0 0 6.291 16 11.502 11.502 0 0 0 17.964 4.5c0-.177 0-.35-.012-.523A8.143 8.143 0 0 0 20 1.892Z" clip-rule="evenodd"/>
                   </svg> {% endcomment %}
-                  <span class="sr-only">GitHub account</span>
-          </div>
+                    <span class="sr-only">Twitter page</span>
+                </a>
+                <a href="#" class="text-gray-500 hover:text-gray-900 dark:hover:text-white ms-5">
+                  {% comment %} <svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                          <path fill-rule="evenodd" d="M10 .333A9.911 9.911 0 0 0 6.866 19.65c.5.092.678-.215.678-.477 0-.237-.01-1.017-.014-1.845-2.757.6-3.338-1.169-3.338-1.169a2.627 2.627 0 0 0-1.1-1.451c-.9-.615.07-.6.07-.6a2.084 2.084 0 0 1 1.518 1.021 2.11 2.11 0 0 0 2.884.823c.044-.503.268-.973.63-1.325-2.2-.25-4.516-1.1-4.516-4.9A3.832 3.832 0 0 1 4.7 7.068a3.56 3.56 0 0 1 .095-2.623s.832-.266 2.726 1.016a9.409 9.409 0 0 1 4.962 0c1.89-1.282 2.717-1.016 2.717-1.016.366.83.402 1.768.1 2.623a3.827 3.827 0 0 1 1.02 2.659c0 3.807-2.319 4.644-4.525 4.889a2.366 2.366 0 0 1 .673 1.834c0 1.326-.012 2.394-.012 2.72 0 .263.18.572.681.475A9.911 9.911 0 0 0 10 .333Z" clip-rule="evenodd"/>
+                    </svg> {% endcomment %}
+                    <span class="sr-only">GitHub account</span>
+            </div>
+        </div>
       </div>
-    </div>
-</footer>
+    </footer>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/flowbite/2.3.0/flowbite.min.js"></script>
 
+  </body>
 </html>
diff --git a/myproject/myapp/templates/index.html b/myproject/myapp/templates/index.html
deleted file mode 100644
index bd101b786dcd387866066dc68702626b8d711db2..0000000000000000000000000000000000000000
--- a/myproject/myapp/templates/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-{% extends "_base.html" %}
-
-{% block content %}
-  <section class="bg-white dark:bg-gray-900">
-    <div class="gap-16 items-center py-8 px-4 mx-auto max-w-screen-xl lg:grid lg:grid-cols-2 lg:py-16 lg:px-6">
-        <div class="font-light text-gray-500 sm:text-lg dark:text-gray-400">
-            <h2 class="mb-4 text-4xl tracking-tight font-extrabold text-gray-900 dark:text-white">An Intelligent System for Instrument Detection</h2>
-            <p class="mb-4">*placeholder input* We present to you a intelligent system for instrument detection. Using audio processing techinques and a convolutionsal 
-              neural network we are able to classify instruments used in a song. other exciting words that might catch peoples attention and make them use our product. 
-              To use our service upload an mp3 file below.
-              *placeholder input*
-            </p>
-        </div>
-        <div class="grid grid-cols-2 gap-4 mt-8">
-          {% load static %}
-            <img class="w-full rounded-lg" src="{% static 'src/images/0_IPKn3dedq86U4UqP.png' %}" alt="CNN for audio">
-        </div>
-    </div>
-    <div class="gap-16 items-center py-8 px-4 mx-auto max-w-screen-xl lg:grid lg:grid-cols-2 lg:py-16 lg:px-6">
-      <input class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400" id="file_input" type="file">
-      <button type="button" class="text-white bg-gray-800 hover:bg-gray-900 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700 dark:border-gray-700">Run Algorithm</button>
-    </div>
-</section>
-
-  
-{% endblock content %}
\ No newline at end of file
diff --git a/myproject/myapp/templates/index1.html b/myproject/myapp/templates/index1.html
new file mode 100644
index 0000000000000000000000000000000000000000..c0044f2d18170a5e7eb76ce0fd7fb3c646433677
--- /dev/null
+++ b/myproject/myapp/templates/index1.html
@@ -0,0 +1,96 @@
+{% extends "_base.html" %}
+
+{% block content %}
+  <section class="bg-white dark:bg-gray-900">
+    <script src="https://unpkg.com/wavesurfer.js"></script>
+
+    <div class="gap-16 items-center py-8 px-4 mx-auto max-w-screen-xl lg:grid lg:grid-cols-2">
+        <div class="font-light text-gray-500 sm:text-lg dark:text-gray-400">
+            <h2 class="mb-4 text-4xl tracking-tight font-extrabold text-gray-900 dark:text-white">An Intelligent System for Instrument Detection</h2>
+            <p class="mb-4">*placeholder input* We present to you a intelligent system for instrument detection. Using audio processing techinques and a convolutionsal
+              neural network we are able to classify instruments used in a song. other exciting words that might catch peoples attention and make them use our product.
+              To use our service upload an mp3 file below.
+              *placeholder input*
+            </p>
+        </div>
+        <div class="grid gap-4 mt-8">
+          {% load static %}
+            <img class="w-240 h-60 rounded-lg" src="{% static 'src/images/0_IPKn3dedq86U4UqP.png' %}" alt="CNN for audio">
+        </div>
+    </div>
+
+    <div class="gap-16 items-center py-8 px-4 mx-auto max-w-screen-xl lg:grid lg:grid-cols-2">
+      <form enctype="multipart/form-data" method="post" id="uploadForm">
+        {% csrf_token %}
+        {{ form.audio_file }}
+        <button type="reset" class="text-gray-800 bg-white hover:bg-gray-100 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-gray-300 dark:hover:bg-gray-400 dark:focus:ring-gray-500 dark:border-gray-500">
+          Clear
+        </button>
+        <button type="submit" class="text-white bg-gray-800 hover:bg-gray-900 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700 dark:border-gray-700">
+          Run Algorithm
+        </button>
+      </form>
+    </div>
+
+
+    <div id="player" class="py-8 px-4 mx-auto max-w-screen-xl lg:py-8 hidden">
+      <div id="waveform" class="w-full h-32 m-4"></div>
+      <button id="playButton" class="text-white bg-gray-800 hover:bg-gray-900 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700 dark:border-gray-700 w-full" disabled>Play</button>
+  </div>
+  <script>
+      var wavesurfer = WaveSurfer.create({
+          container: '#waveform',
+          waveColor: 'gray',
+          progressColor: '#f9f1f1'
+      });
+      function loadAudioFile(event) {
+        var file = event.target.files[0];
+        var reader = new FileReader();
+        reader.onload = function(e) {
+            wavesurfer.loadBlob(file);
+            document.getElementById('player').classList.remove('hidden');
+            submitForm();  // Submit the form
+        }
+        reader.readAsDataURL(file);
+    }
+      wavesurfer.on('ready', function () {
+          document.getElementById('playButton').disabled = false;
+      });
+      document.getElementById('playButton').addEventListener('click', function () {
+          wavesurfer.playPause();
+          this.textContent = wavesurfer.isPlaying() ? 'Stop' : 'Play';
+      });
+      wavesurfer.on('play', function () {
+          document.getElementById('playButton').textContent = 'Stop';
+      });
+      wavesurfer.on('pause', function () {
+          document.getElementById('playButton').textContent = 'Play';
+      });
+      function submitForm() {
+        var form = document.getElementById('uploadForm');
+        var formData = new FormData(form);
+        var xhr = new XMLHttpRequest();
+        xhr.open('POST', '/uploading_file/', true);
+        xhr.setRequestHeader('X-CSRFToken', getCookie('csrftoken'));  // Include the CSRF token
+        xhr.send(formData);
+    }
+    // Function to get the CSRF token
+    function getCookie(name) {
+        var cookieValue = null;
+        if (document.cookie && document.cookie !== '') {
+            var cookies = document.cookie.split(';');
+            for (var i = 0; i < cookies.length; i++) {
+                var cookie = cookies[i].trim();
+                if (cookie.substring(0, name.length + 1) === (name + '=')) {
+                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
+                    break;
+                }
+            }
+        }
+        return cookieValue;
+    }
+  </script>
+</section>
+
+
+{% endblock content %}
diff --git a/myproject/myapp/templates/index2.html b/myproject/myapp/templates/index2.html
new file mode 100644
index 0000000000000000000000000000000000000000..7cf84cd548c3d740ac54daec2b96a4fb952fd440
--- /dev/null
+++ b/myproject/myapp/templates/index2.html
@@ -0,0 +1,41 @@
+{% extends "_base.html" %}
+
+{% block content %}
+  <section class="bg-white dark:bg-gray-900">
+    <div class="gap-16 items-center py-8 px-4 mx-auto max-w-screen-xl lg:grid lg:grid-cols-2 lg:py-16 lg:px-6">
+        <div class="font-light text-gray-500 sm:text-lg dark:text-gray-400">
+            <h2 class="mb-4 text-4xl tracking-tight font-extrabold text-gray-900 dark:text-white">An Intelligent System for Instrument Detection</h2>
+            <p class="mb-4">*placeholder input* We present to you a intelligent system for instrument detection. Using audio processing techinques and a convolutionsal 
+              neural network we are able to classify instruments used in a song. other exciting words that might catch peoples attention and make them use our product. 
+              To use our service upload an mp3 file below.
+              *placeholder input*
+            </p>
+        </div>
+        <div class="grid gap-4 mt-8">
+          {% load static %}
+            <img class="w-240 h-60 rounded-lg" src="{% static 'src/images/0_IPKn3dedq86U4UqP.png' %}" alt="CNN for audio">
+        </div>
+    </div>
+    <section class="bg-white dark:bg-gray-900">
+        <div class="py-8 px-4 mx-auto max-w-screen-xl text-center lg:py-16 lg:px-6">
+            <div class="mx-auto max-w-screen-sm">
+                <h2 class="mb-4 text-4xl tracking-tight font-extrabold text-gray-900 dark:text-white">
+                    Want use to our service?
+                </h2>
+                <p class="mb-8 font-light text-gray-500 lg:mb-16 sm:text-xl dark:text-gray-400">
+                    <a href="{% url 'register' %}" class="inline-flex items-center font-medium text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-700">Sign up</a>
+                    or <a href="{% url 'login' %}" class="inline-flex items-center font-medium text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-700">Login!</a> 
+                    Choose one of our exceptionally well priced payment offers and enjoy our service to it's fullest!                 
+                </p>
+            </div>
+        </div>
+    </section>
+{% comment %} <section class="bg-white dark:bg-gray-900">
+    <div class="gap-4 items-center py-8 px-4 mx-auto max-w-screen-xl lg:grid lg:grid-cols-2 lg:py-16 lg:px-6 cursor-not-allowed">
+      <input class="block w-full text-sm text-gray-900 border border-gray-300 rounded-lg bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 cursor-not-allowed" id="file_input" type="file" disabled>
+      <button type="button" class="text-white bg-gray-800 focus:outline-none focus:ring-4 focus:ring-gray-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-gray-800 dark:focus:ring-gray-700 dark:border-gray-700 cursor-not-allowed" disabled>Run Algorithm</button>
+    </div> {% endcomment %}
+</section>
+
+  
+{% endblock content %}
\ No newline at end of file
diff --git a/myproject/myapp/templates/login.html b/myproject/myapp/templates/login.html
index 2dbaaab803b8ce4a58ea1722c30f3865d7b4e143..bbd3d038acf13d9f84ce685393d7ed8a73f2653c 100644
--- a/myproject/myapp/templates/login.html
+++ b/myproject/myapp/templates/login.html
@@ -1,7 +1,7 @@
 {% extends "_base.html"%}{% block content %}
 <section class="my-10">
     <div class="flex flex-col items-center justify-center px-6 py-8 mx-auto md:h-screen lg:py-0">
-        <div class="w-full bg-white rounded-lg shadow dark:border md:mt-0 sm:max-w-md xl:p-0 dark:bg-gray-800 dark:border-gray-700">
+        <div class="w-full bg-white rounded-lg shadow dark:border md:mt-0 sm:max-w-md lg:w-50 xl:p-0 dark:bg-gray-800 dark:border-gray-700">
             <div class="p-6 space-y-4 md:space-y-6 sm:p-8">
                 <h1 class="text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white">
                     Sign in to your account
diff --git a/myproject/myapp/templates/pricing.html b/myproject/myapp/templates/pricing.html
new file mode 100644
index 0000000000000000000000000000000000000000..66b2954f536f2966a322c262b68b0341cd95856e
--- /dev/null
+++ b/myproject/myapp/templates/pricing.html
@@ -0,0 +1,115 @@
+{% extends "_base.html" %}{% block content %}
+
+<div class="grid grid-cols-2 content-start">
+    <div class="w-full mx-auto max-w-sm p-4 bg-white border border-gray-200 rounded-lg shadow sm:p-8 dark:bg-gray-800 dark:border-gray-700">
+        <h5 class="mb-4 text-xl font-medium text-gray-500 dark:text-gray-400">Trial plan</h5>
+        <div class="flex items-baseline text-gray-900 dark:text-white">
+            <span class="text-5xl font-extrabold tracking-tight">Free</span>
+        </div>
+        <ul role="list" class="space-y-5 my-7">
+            <li class="flex items-center">
+                <svg class="flex-shrink-0 w-4 h-4 text-blue-700 dark:text-blue-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 dark:text-gray-400 ms-3">1 team member</span>
+            </li>
+            <li class="flex">
+                <svg class="flex-shrink-0 w-4 h-4 text-blue-700 dark:text-blue-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 dark:text-gray-400 ms-3">0GB Cloud storage</span>
+            </li>
+            <li class="flex  decoration-gray-500">
+                <svg class="flex-shrink-0 w-4 h-4  text-blue-700 dark:text-gray-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 ms-3">1 File upload</span>
+                <span class="ms-1 text-sm font-normal text-gray-500 dark:text-gray-400">/month</span>
+            </li>
+            <li class="flex line-through decoration-gray-500">
+                <svg class="flex-shrink-0 w-4 h-4 text-gray-400 dark:text-blue-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 dark:text-gray-400 ms-3">Integration help</span>
+            </li>
+            <li class="flex line-through decoration-gray-500">
+                <svg class="flex-shrink-0 w-4 h-4 text-gray-400 dark:text-gray-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 ms-3">API Access</span>
+            </li>
+            <li class="flex line-through decoration-gray-500">
+                <svg class="flex-shrink-0 w-4 h-4 text-gray-400 dark:text-gray-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 ms-3">Complete documentation</span>
+            </li>
+            <li class="flex line-through decoration-gray-500">
+                <svg class="flex-shrink-0 w-4 h-4 text-gray-400 dark:text-gray-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 ms-3">24×7 phone & email support</span>
+            </li>
+        </ul>
+        <button type="button" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-200 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-900 font-medium rounded-lg text-sm px-5 py-2.5 inline-flex justify-center w-full text-center">Choose plan</button>
+    </div>
+    
+    <div class="w-full mx-auto max-w-sm p-4 bg-white border border-gray-200 rounded-lg shadow sm:p-8 dark:bg-gray-800 dark:border-gray-700">
+        <h5 class="mb-4 text-xl font-medium text-gray-500 dark:text-gray-400">Standard plan</h5>
+        <div class="flex items-baseline text-gray-900 dark:text-white">
+            <span class="text-3xl font-semibold">£</span>
+            <span class="text-5xl font-extrabold tracking-tight">49</span>
+            <span class="ms-1 text-xl font-normal text-gray-500 dark:text-gray-400">/month</span>
+        </div>
+        <ul role="list" class="space-y-5 my-7">
+            <li class="flex items-center">
+                <svg class="flex-shrink-0 w-4 h-4 text-blue-700 dark:text-blue-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 dark:text-gray-400 ms-3">2 team members</span>
+            </li>
+            <li class="flex">
+                <svg class="flex-shrink-0 w-4 h-4 text-blue-700 dark:text-blue-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 dark:text-gray-400 ms-3">20GB Cloud storage</span>
+            </li>
+            <li class="flex  decoration-gray-500">
+                <svg class="flex-shrink-0 w-4 h-4 text-blue-700 dark:text-gray-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 ms-3">100 File Uploads</span>
+                <span class="ms-1 text-sm font-normal text-gray-500 dark:text-gray-400">/month</span>
+            </li>
+            <li class="flex">
+                <svg class="flex-shrink-0 w-4 h-4 text-blue-700 dark:text-blue-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 dark:text-gray-400 ms-3">Integration help</span>
+            </li>
+            <li class="flex  decoration-gray-500">
+                <svg class="flex-shrink-0 w-4 h-4 text-blue-700 dark:text-gray-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 ms-3">API Access</span>
+            </li>
+            <li class="flex  decoration-gray-500">
+                <svg class="flex-shrink-0 w-4 h-4 text-blue-700 dark:text-gray-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 ms-3">Complete documentation</span>
+            </li>
+            <li class="flex  decoration-gray-500">
+                <svg class="flex-shrink-0 w-4 h-4 text-blue-700 dark:text-gray-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
+                    <path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5Zm3.707 8.207-4 4a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L9 10.586l3.293-3.293a1 1 0 0 1 1.414 1.414Z"/>
+                </svg>
+                <span class="text-base font-normal leading-tight text-gray-500 ms-3">24×7 phone & email support</span>
+            </li>
+        </ul>
+        <button type="button" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-200 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-900 font-medium rounded-lg text-sm px-5 py-2.5 inline-flex justify-center w-full text-center">Choose plan</button>
+    </div>
+        
+</div>
+
+    
+{% endblock content %}
\ No newline at end of file
diff --git a/myproject/myapp/templates/privacy_policy.html b/myproject/myapp/templates/privacy_policy.html
new file mode 100644
index 0000000000000000000000000000000000000000..409f77530974dc3e3007cadda9ccca9a134cfd94
--- /dev/null
+++ b/myproject/myapp/templates/privacy_policy.html
@@ -0,0 +1,19 @@
+{% extends "_base.html"%}
+{% block content %}
+<section class="bg-white dark:bg-gray-900">
+    <div class="py-8 px-4 mx-auto max-w-screen-xl sm:py-16 lg:px-6">
+        <h2 class="mb-8 text-4xl tracking-tight font-extrabold text-gray-900 dark:text-white">Privacy Policy</h2>
+        <p class="text-gray-500 dark:text-gray-400">
+            Effective date: 27/02/2024
+
+        </p>
+        <p class="text-gray-500 dark:text-gray-400">
+            Group 25 operates the Instrument Classifier application. 
+            This page informs you of our policies regarding the collection, use, and disclosure of personal data when you use our App and the choices you have associated with that data. 
+        </p>
+        <br></br>
+        <div class="grid pt-8 text-left border-t border-gray-200 md:gap-16 dark:border-gray-700 md:grid-cols-2">
+            
+    </div>
+  </section>
+{% endblock content %}
\ No newline at end of file
diff --git a/myproject/myapp/templates/receipt_test.html b/myproject/myapp/templates/receipt_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..7378e0017c6b2dae6f6d05b5e460abec796e6439
--- /dev/null
+++ b/myproject/myapp/templates/receipt_test.html
@@ -0,0 +1,8 @@
+<!-- For testing the receipts ONLY. TODO: delete when working -->
+{% extends "_base.html" %}{% block content %}
+<h1>receipts</h1>
+<a href="{% url 'generate_pdf' %}" download>
+    <button>Download PDF</button>    
+</a>
+
+{% endblock content %}
\ No newline at end of file
diff --git a/myproject/myapp/templates/terms_conditions.html b/myproject/myapp/templates/terms_conditions.html
new file mode 100644
index 0000000000000000000000000000000000000000..53685f9d0e9a1daf5c6aa2bf14f58926c92bb65f
--- /dev/null
+++ b/myproject/myapp/templates/terms_conditions.html
@@ -0,0 +1,129 @@
+{% extends "_base.html"%}
+{% block content %}
+<section class="bg-white dark:bg-gray-900">
+    <div class="py-8 px-4 mx-auto max-w-screen-xl sm:py-16 lg:px-6">
+        <h2 class="mb-8 text-4xl tracking-tight font-extrabold text-gray-900 dark:text-white">Terms and Conditions</h2>
+        <div class="grid pt-8 text-left border-t border-gray-200 md:gap-16 dark:border-gray-700 md:grid-cols-2">
+            <div>
+                <div class="mb-10">
+                    <h3 class="flex items-center mb-4 text-lg font-medium text-gray-900 dark:text-white">
+                        1. Use of the App
+                    </h3>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        1.1. License: 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">    
+                    We grant you a limited, non-exclusive, non-transferable, revocable license to use the App for your personal or internal business purposes.
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        1.2. Prohibited Activities: 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        You agree not to:
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">    
+                        Use the App in any unlawful manner or in a manner that violates these Terms.
+                        Reverse engineer, modify, or create derivative works of the App.
+                        Interfere with the operation of the App or any user's enjoyment of the App.
+                        Use the App for any commercial purpose without our prior written consent.
+                        Use the App to infringe upon any intellectual property rights.
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        1.3. Accuracy of Information: 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                    We do not warrant the accuracy, completeness, or reliability of any content generated by the App. You acknowledge that the App's results may vary and may not always be accurate.</p>
+                    </p>
+                </div>
+                <div class="mb-10">                        
+                    <h3 class="flex items-center mb-4 text-lg font-medium text-gray-900 dark:text-white">
+                        2. Intellectual Property Rights
+                    </h3>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        2.1. Ownership: 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        All rights, title, and interest in and to the App, including all intellectual property rights, are and will remain owned by us.
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        2.2. Feedback: 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        If you provide us with any feedback or suggestions regarding the App, you grant us a non-exclusive, royalty-free, worldwide, perpetual, irrevocable license to use and incorporate such feedback into the App.
+                    </p>
+                </div>
+                <div class="mb-10">
+                    <h3 class="flex items-center mb-4 text-lg font-medium text-gray-900 dark:text-white">
+                        3. Privacy
+                    </h3>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        3.1. Data Collection:
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        By using the App, you consent to the collection and use of your data as described in our Privacy Policy.
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        3.2. User Data: 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        You are solely responsible for the accuracy, legality, and reliability of any data you input into the App.
+                    </p>
+                </div>
+            </div>
+            <div>
+                <div class="mb-10">
+                    <h3 class="flex items-center mb-4 text-lg font-medium text-gray-900 dark:text-white">
+                        4. Limitation of Liability
+                    </h3>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        4.1. Disclaimer: 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        To the fullest extent permitted by applicable law, the app is provided "as is," without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        4.2. Limitation of Liability: 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        In no event shall we be liable for any indirect, incidental, special, consequential, or punitive damages, or any loss of profits or revenues, whether incurred directly or indirectly, or any loss of data, use, goodwill, or other intangible losses, arising out of your access to or use of the app, regardless of whether we have been advised of the possibility of such damages. 
+                    </p>
+                </div>
+                <div class="mb-10">
+                    <h3 class="flex items-center mb-4 text-lg font-medium text-gray-900 dark:text-white">
+                        5. Governing Law
+                    </h3>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        5.1. Jurisdiction:
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        These Terms shall be governed by and construed in accordance with the laws of the United Kingdom, without regard to its conflict of law provisions.
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        5.2. Dispute Resolution:
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        Any dispute arising out of or relating to these Terms or the App shall be resolved exclusively in the courts located in the United Kingdom.
+                    </p>
+                </div>
+                <div class="mb-10">
+                    <h3 class="flex items-center mb-4 text-lg font-medium text-gray-900 dark:text-white">
+                        6. Changes to Terms
+                    </h3>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        6.1. Modification: 
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material, we will provide at least 10 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion.
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        6.2. Continued Use:
+                    </p>
+                    <p class="text-gray-500 dark:text-gray-400">
+                        By continuing to access or use the App after any revisions become effective, you agree to be bound by the revised Terms. If you do not agree to the new Terms, you are no longer authorized to use the App.
+                    </p>
+                </div>
+            </div>
+        </div>
+    </div>
+  </section>
+{% endblock content %}
\ No newline at end of file
diff --git a/myproject/myapp/templates/user_page.html b/myproject/myapp/templates/user_page.html
index 31f3c756ad14292cb9cb47e52400c303f65f4068..c9f63dbd8618a5b8e38f4506c9cc0b2afcc3fe6d 100644
--- a/myproject/myapp/templates/user_page.html
+++ b/myproject/myapp/templates/user_page.html
@@ -3,7 +3,7 @@
   class="grid grid-cols-1 px-4 pt-6 xl:grid-cols-3 xl:gap-4 dark:bg-grey-300"
 >
   <div class="mb-4 col-span-full xl:mb-2">
-    <h1 class="text-xl font-semibold text-gray-300 sm:text-2xl dark:text-white">
+    <h1 class="text-xl font-semibold text-gray-800 sm:text-2xl dark:text-white">
       User settings
     </h1>
   </div>
@@ -232,12 +232,14 @@
             required
           />
         </div>
+        <a href="{% url 'generate_pdf' %}"
         <button
           type="submit"
           class="p-2 bg-blue-500 text-white rounded-md hover:bg-blue-600"
         >
           Download Financial Statement
         </button>
+        </a>
       </form>
       {% comment %} REPLACE WITH LOGIC TO CHECK PROPER USER {% endcomment %}
     </div>
diff --git a/myproject/myapp/urls.py b/myproject/myapp/urls.py
index c2d522b6ef25b754900564e5c8a061cd061f920f..22aeca3b6be4e9a1c48177666d6ff362f2ef9783 100644
--- a/myproject/myapp/urls.py
+++ b/myproject/myapp/urls.py
@@ -1,16 +1,23 @@
 from django.urls import path
-from .views import index, users, maintenance, handler404, handler500, register, user_login
-
+<<<<<<< myproject/myapp/urls.py
+from .views import index, users, maintenance, handler404, handler500, register, user_login, terms_conditions, privacy_policy, handling_music_file, pricing, generate_pdf
 
 
 urlpatterns = [
     # path('', index, name='index'), <- uncomment when index/main page will be ready
     path('', index),
-    path('user/',users, name='users'),
+
+    path('user/', users, name='users'),
     path('404/', handler404),
     path('500/', handler500),
     path('maintenance/', maintenance),
     path('register/', register, name='register'),
     path('login/', user_login, name='user_login'),
+    path('terms_conditions/', terms_conditions, name='terms_conditions'),
+    path('pricay_policy/', privacy_policy, name='privacy_policy'),
+    path('pricing/', pricing, name='pricing'),
+    path('uploading_file/', handling_music_file, name='uploading_file'),
+    path('generate_pdf/', generate_pdf, name='generate_pdf')
+    path('pricing/', pricing, name='pricing'),
+    path('generate_pdf/', generate_pdf, name='generate_pdf')
 ]
-
diff --git a/myproject/myapp/views.py b/myproject/myapp/views.py
index 9488d61632231521dce44412d621fd9d86c231c3..0c4fea8ed905f4a3cc49a0927463f7e7cdeff0de 100644
--- a/myproject/myapp/views.py
+++ b/myproject/myapp/views.py
@@ -1,16 +1,62 @@
-from django.shortcuts import render, redirect
-from django.template import RequestContext
-
 from django.contrib.auth import authenticate, login, logout
 from django.contrib.auth.forms import UserCreationForm 
 from django.contrib.auth.models import User
 from django.contrib import messages
+from django.http import HttpResponse
+from django.utils import timezone
+from django.shortcuts import render, redirect
+from django.template import RequestContext
+import logging
+from reportlab.pdfgen import canvas
+
+from .forms import InstrumentDetectionForm, CustomRegistrationForm, LoginForm
+from .models import Log, Action, User
+
+
+logger = logging.getLogger(__name__)
+
+def get_log_data(action, status='success', file=None, **additional_fields):
+    log_data = {
+        'action': action.value,
+        'status': status,
+        'file': file,
+    }
+    log_data.update(additional_fields)
+    return log_data
+
+def create_log(user, log_data):
+    Log.objects.create(user=user, log=log_data)
+
+def handling_music_file(request):
+    if request.method == 'POST':
+        if 'audio_file' in request.FILES:
+            log_data = {
+                'action': 'File uploaded',
+                'file': request.FILES['audio_file'].name,
+            }
+            log_data = get_log_data(Action.UPLOAD_FILE, 'success', file=request.FILES['audio_file'].name)
+            # create_log(request.user if request.user.is_authenticated else None, log_data)
+            return HttpResponse('File uploaded successfully!',log_data)
+    log_data = get_log_data(Action.invalid_file, 'error')
+    # create_log(None, log_data)
+    return HttpResponse('File invalid',log_data)
 
-from .forms import CustomRegistrationForm, LoginForm
 
 
 def index(request):
-    return render(request, 'index.html')
+    #for now this authenication just returns the main view
+    #when user auth is done change the else to return index2.html
+    if request.user.is_authenticated:
+        if request.method == 'POST':
+            if request.FILES['audio_file'] != None:
+                uploaded_file = request.FILES['audio_file']
+                # Do something with the uploaded file
+            return render(request, 'index1.html')
+        else:
+            return render(request, 'index1.html')
+    else:
+        audio_form = InstrumentDetectionForm()
+        return render(request, 'index1.html', {'form': audio_form})
 
 def users(request):
     return render(request, 'user_page.html')
@@ -65,3 +111,25 @@ def register(request):
 def user_logout(request):
     logout(request)
     return redirect('user_login')
+
+def terms_conditions(request):
+    return render(request, 'terms_conditions.html')
+
+def privacy_policy(request):
+    return render(request, 'privacy_policy.html')
+
+def pricing(request):
+    return render(request, 'pricing.html')
+
+#For testing the receipts ONLY. TODO: delete when working
+def generate_pdf(request):
+    response = HttpResponse(content_type='application/pdf')
+    response['Content-Disposition'] = 'attachment; filename="example.pdf"'
+
+    p = canvas.Canvas(response)
+    p.drawString(100, 800, "Hello, this is a PDF!")
+    p.showPage()
+    p.save()
+
+    return response
+
diff --git a/myproject/myproject/settings.py b/myproject/myproject/settings.py
index a32ffa3dfec665deb4b89c4628b73d19b3f96d73..1725ba2e02c1db575915dd7a88a048763feab2c3 100644
--- a/myproject/myproject/settings.py
+++ b/myproject/myproject/settings.py
@@ -65,6 +65,22 @@ MIDDLEWARE = [
 
 ROOT_URLCONF = 'myproject.urls'
 
+LOGGING = {
+    'version': 1,
+    'disable_existing_loggers': False,
+    'handlers': {
+        'file': {
+            'level': 'INFO',
+            'class': 'logging.FileHandler',
+            'filename': 'debug.log',
+        },
+    },
+    'root': {
+        'handlers': ['file'],
+        'level': 'INFO',
+    }
+}
+
 TEMPLATES = [
     {
         'BACKEND': 'django.template.backends.django.DjangoTemplates',
diff --git a/myproject/requirements.txt b/myproject/requirements.txt
index d097dbe5df07d7604d3135375a0521a5b414e15a..770ecd9861ebf9de2482dfe22b18c693de53bf54 100644
--- a/myproject/requirements.txt
+++ b/myproject/requirements.txt
@@ -7,6 +7,32 @@ mysqlclient==2.2.3
 rcssmin==1.1.1
 rjsmin==1.2.1
 sqlparse==0.4.4
-typing_extensions==4.9.0
 psycopg==3.1.18
-psycopg-binary==3.1.18
\ No newline at end of file
+psycopg-binary==3.1.18
+audioread==3.0.1
+certifi==2024.2.2
+cffi==1.16.0
+charset-normalizer==3.3.2
+decorator==5.1.1
+idna==3.6
+joblib==1.3.2
+lazy_loader==0.3
+librosa==0.10.1
+llvmlite==0.42.0
+msgpack==1.0.8
+numba==0.59.0
+numpy==1.26.4
+packaging==24.0
+platformdirs==4.2.0
+pooch==1.8.1
+pycparser==2.21
+requests==2.31.0
+scikit-learn==1.4.1.post1
+scipy==1.12.0
+soundfile==0.12.1
+soxr==0.3.7
+threadpoolctl==3.3.0
+typing_extensions==4.10.0
+urllib3==2.2.1
+typing_extensions==4.9.0
+reportlab==4.1.0
\ No newline at end of file
diff --git a/myproject/tailwind.config.js b/myproject/tailwind.config.js
index 42703b4a9280a89abfe84d3ef1867feefffdd54c..f905bc5f4502c9a6ee2523e24be00bccc887a54c 100644
--- a/myproject/tailwind.config.js
+++ b/myproject/tailwind.config.js
@@ -12,50 +12,3 @@ module.exports = {
     require('flowbite/plugin')
   ],
 }
-
-tailwind.config = {
-  darkMode: 'class',
-  theme: {
-    extend: {
-      colors: {
-        primary: {"50":"#eff6ff","100":"#dbeafe","200":"#bfdbfe","300":"#93c5fd","400":"#60a5fa","500":"#3b82f6","600":"#2563eb","700":"#1d4ed8","800":"#1e40af","900":"#1e3a8a","950":"#172554"}
-      }
-    },
-    fontFamily: {
-      'body': [
-    'Inter', 
-    'ui-sans-serif', 
-    'system-ui', 
-    '-apple-system', 
-    'system-ui', 
-    'Segoe UI', 
-    'Roboto', 
-    'Helvetica Neue', 
-    'Arial', 
-    'Noto Sans', 
-    'sans-serif', 
-    'Apple Color Emoji', 
-    'Segoe UI Emoji', 
-    'Segoe UI Symbol', 
-    'Noto Color Emoji'
-  ],
-      'sans': [
-    'Inter', 
-    'ui-sans-serif', 
-    'system-ui', 
-    '-apple-system', 
-    'system-ui', 
-    'Segoe UI', 
-    'Roboto', 
-    'Helvetica Neue', 
-    'Arial', 
-    'Noto Sans', 
-    'sans-serif', 
-    'Apple Color Emoji', 
-    'Segoe UI Emoji', 
-    'Segoe UI Symbol', 
-    'Noto Color Emoji'
-  ]
-    }
-  }
-}
diff --git a/myproject/test.pdf b/myproject/test.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..bb5d8ca008dadef4d39f4128e65a2679ff1fec5e
Binary files /dev/null and b/myproject/test.pdf differ