diff --git a/.gitignore b/.gitignore
index f48ddc72ffb73c6af1e3f1b717610b9c02a966bf..e093c59e03a0b81cc7e954c487083935f5e42d8a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,8 @@ myproject/node_modules
 myproject/env
 myproject/myapp/static/CACHE
 myproject/myapp/__pycache__
+.DS_Store
+myproject/myproject/__pycache__/__init__.cpython-312.pyc
+myproject/myproject/__pycache__/settings.cpython-312.pyc
+myproject/myproject/__pycache__/urls.cpython-312.pyc
 .venv/
-.DS_Store
\ No newline at end of file
diff --git a/myproject/.env b/myproject/.env
index ef6b41180fb05251bb604bd805a5edcf6e910373..e4a94e923637c072c2af1336d677b2d7ea0fef1f 100644
--- a/myproject/.env
+++ b/myproject/.env
@@ -1,17 +1,7 @@
 # Django
 DJANGO_SECRET_KEY='django-insecure-t%k1f1!c4_9f#x@r_z_k69oz21@0eadh2qb_k3pm3=gknej9f@'
-
 DEBUG=True
 
-# # Database
-# DATABASE_NAME=mlaas
-# DATABASE_USER=user
-# DATABASE_PASSWORD=password
-# DATABASE_HOST=db
-# DATABASE_PORT=3306
-
-
-
 #postgres
 POSTGRES_DB=mlaas
 POSTGRES_NAME=mlaas
diff --git a/myproject/docker-compose.yml b/myproject/docker-compose.yml
index 69db97839f54bb548e9dc9cefbb17c94e269407f..84ac46fcb7746ef1f31bc090b71aa5ad58bdb5ca 100644
--- a/myproject/docker-compose.yml
+++ b/myproject/docker-compose.yml
@@ -1,48 +1,3 @@
-# version: '3.8'
-# services:
-#   db:
-#       image: mysql:8.3
-#       volumes:
-#         - mysql_data:/var/lib/mysql
-#         #- ./db_script.sql:/docker-entrypoint-initdb.d/init-db.sql 
-#       restart: unless-stopped
-#       ports:
-#         - "3307:3306"
-#       environment:
-#         MYSQL_ROOT_PASSWORD: root_password
-#         MYSQL_DATABASE: mlaas
-#         MYSQL_USER: user
-#         MYSQL_PASSWORD: password
-#   web:
-#     build: .
-#     command: /bin/sh -c "/entrypoint.sh"
-#     volumes:
-#       - .:/usr/src/app
-#       - static_volume:/usr/src/app/static
-#     depends_on:
-#       - db
-#     environment:
-#       #DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY}
-#       #DEBUG: ${DEBUG}
-#       DATABASE_NAME: ${DATABASE_NAME}
-#       DATABASE_USER: ${DATABASE_USER}
-#       DATABASE_PASSWORD: ${DATABASE_PASSWORD}
-#       DATABASE_HOST: ${DATABASE_HOST}
-#       DATABASE_PORT: ${DATABASE_PORT}
-#     ports:
-#       - "8000:8000"
-#   tailwind:
-#     image: node:20.11.1-slim
-#     working_dir: /usr/src/app
-#     volumes:
-#       - .:/usr/src/app
-#       - static_volume:/usr/src/app/static
-  
-
-# volumes:
-#   static_volume:
-#   mysql_data:
-
 
 version: '3.8'
 services:
@@ -74,9 +29,7 @@ services:
       POSTGRES_PORT: ${POSTGRES_PORT}
     ports:
       - "8000:8000"
-#legacy env file
-    # env_file:
-    # - ./.end.dev
+
   tailwind:
     image: node:20.11.1-slim
     working_dir: /usr/src/app
diff --git a/myproject/myapp/forms.py b/myproject/myapp/forms.py
index a693ce7226a8bf4d18f4e5a830222f296c943e7c..57f77dcfaeddf2e1b9e333f18d26456c77c6625f 100644
--- a/myproject/myapp/forms.py
+++ b/myproject/myapp/forms.py
@@ -1,5 +1,20 @@
-# forms.py
+<<<<<<< myproject/myapp/forms.py
 from django import forms
+from django.contrib.auth.forms import UserCreationForm 
+from django.contrib.auth.models import User
+
+class CustomRegistrationForm(UserCreationForm):
+    #UserCreationForm comes with username, password1, password2 by default
+    #only email needs to be added for our custom users
+    email = forms.EmailField()
+
+    class Meta(UserCreationForm.Meta):
+        model = User
+        fields = ["username", "email", "password1", "password2"]
+
+class LoginForm(forms.Form):
+    username = forms.CharField()
+    password = forms.CharField(widget=forms.PasswordInput)
 
 class InstrumentDetectionForm(forms.Form):
     audio_file = forms.FileField(
@@ -13,3 +28,4 @@ class InstrumentDetectionForm(forms.Form):
         })
     )
 
+
diff --git a/myproject/myapp/models.py b/myproject/myapp/models.py
index ce6212efa138aaf18cc1f7b83b88607e3e25fdef..f61b35dc0b7786e576c90f0f5e481fc4991e0552 100644
--- a/myproject/myapp/models.py
+++ b/myproject/myapp/models.py
@@ -1,8 +1,38 @@
 from django.db import models
-from django.contrib.auth.models import User
-from django.contrib.postgres.fields import JSONField
+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 = (
+#         0, 'Basic User',
+#         1, 'Admin',
+#         2, 'ML Engineer',
+#         3, 'Accountant'
+#     )
+
+#     usertype = models.PositiveSmallIntegerField(choices=USER_TYPE_CHOICES) # should we declare default=0 here?
+
+# group_names = ['Basic User', 'Admin', 'ML Engineer', 'Accountant']
+# for group_name in group_names:
+#     Group.objects.get_or_create(name=group_name)
+
+# assign group permissions
+# content_type = ContentType.objects.get_for_model(UserTypes)
+# permission = Permission.objects.create(codename='can_view_user',
+#                                        name='Can View User',
+#                                        content_type=content_type)
+# group = Group.objects.get(name='Admin')
+# group.permissions.add(permission)
+
+
+# User = get_user_model()
+
+# user = User.objects.create_user('username', 'email', 'password')
+#names are not necessary - reduces gdpr concerns aswell
+
+
 class Action(Enum):
     UPLOAD_FILE = 'upload_file'
     LOGIN = 'login'
@@ -16,29 +46,6 @@ class Action(Enum):
     USER_DOES_NOT_EXIST = 'user_does_not_exist'
     DOWNLOAD_BREAKDOWN = 'download_breakdown'
     UNKNOWN = 'unknown'
-# #   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", on_delete=models.DO_NOTHING)
-
-# class UserType(models.Model):
-#     """
-#     *   Usertype model
-#     """
-#     usertype = models.CharField(max_length=15)
-
 
 # class Logs(models.Model):
 #     """
diff --git a/myproject/myapp/templates/_base.html b/myproject/myapp/templates/_base.html
index 5e35e256a65a6f7ea62658e727a4d1ee916fa7fb..c7cc36d4c38097ecd5f55efe699670f5a1234528 100644
--- a/myproject/myapp/templates/_base.html
+++ b/myproject/myapp/templates/_base.html
@@ -58,7 +58,7 @@
             </li>
             <li>
               <a
-                href="{% url 'login' %}"
+                href="{% url 'user_login' %}"
                 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"
                 >Login</a
               >
diff --git a/myproject/myapp/templates/login.html b/myproject/myapp/templates/login.html
index be83014bdd899f2b53b057eb3ed1da78d91b9592..bbd3d038acf13d9f84ce685393d7ed8a73f2653c 100644
--- a/myproject/myapp/templates/login.html
+++ b/myproject/myapp/templates/login.html
@@ -6,7 +6,28 @@
                 <h1 class="text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white">
                     Sign in to your account
                 </h1>
-                <form class="space-y-4 md:space-y-6" action="#">
+                
+                
+                <form method="POST">
+                    {% csrf_token %}
+                    {{ form.as_p }}
+                    <br>
+                    <button type="submit">Login</button>
+                    <br>
+                    <a href="{% url 'register' %}">New User: Create Account</a>
+                </form>
+                
+            </div>
+        </div>
+    </div>
+  </section>
+{% endblock content%}
+
+{% comment %}
+
+
+<form class="space-y-4 md:space-y-6" action="#" method="POST">
+                    {% csrf_token %}
                     <div>
                         <label for="email" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Your email</label>
                         <input type="email" name="email" id="email" class="bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" placeholder="name@company.com" required="">
@@ -31,8 +52,6 @@
                         Don’t have an account yet? <a href="#" class="font-medium text-primary-600 hover:underline dark:text-primary-500">Sign up</a>
                     </p>
                 </form>
-            </div>
-        </div>
-    </div>
-  </section>
-{% endblock content%}
\ No newline at end of file
+
+
+{% endcomment %}
\ No newline at end of file
diff --git a/myproject/myapp/templates/register.html b/myproject/myapp/templates/register.html
index baed31f98e5325c326a4449cd4838af0a34e44ca..d6cb1d0e32d7131901279ee374a0afb5ee1dfd6f 100644
--- a/myproject/myapp/templates/register.html
+++ b/myproject/myapp/templates/register.html
@@ -6,7 +6,29 @@
                 <h1 class="text-xl font-bold leading-tight tracking-tight text-gray-900 md:text-2xl dark:text-white">
                     Create an account
                 </h1>
-                <form class="space-y-4 md:space-y-6" action="#">
+                <form method="POST">
+                    {% csrf_token %}
+                    {{ form.as_p }}
+                    <br>
+                    <button type="submit">Register</button>
+                    <br>
+                    <a href="{% url 'user_login' %}">Already created an account? Login</a>
+                </form>
+            </div>
+        </div>
+    </div>
+  </section>
+{% endblock content%}
+
+{% comment %} 
+<h1> Register </h1> 
+
+
+
+
+ <form class="space-y-4 md:space-y-6" action="#" method="POST">
+                    {% csrf_token %}
+                    
                     <div>
                         <label for="email" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Your email</label>
                         <input type="email" name="email" id="email" class="bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" placeholder="name@company.com" required="">
@@ -32,8 +54,5 @@
                         Already have an account? <a href="#" class="font-medium text-primary-600 hover:underline dark:text-primary-500">Login here</a>
                     </p>
                 </form>
-            </div>
-        </div>
-    </div>
-  </section>
-{% endblock content%}
\ No newline at end of file
+
+{% endcomment %}
diff --git a/myproject/myapp/urls.py b/myproject/myapp/urls.py
index e4a569e47d050e54dd3ffb487a607712ac8d55fb..22aeca3b6be4e9a1c48177666d6ff362f2ef9783 100644
--- a/myproject/myapp/urls.py
+++ b/myproject/myapp/urls.py
@@ -1,28 +1,18 @@
 from django.urls import path
-from .views import index
-from .views import users
-from .views import maintenance
-from .views import handler404
-from .views import handler500
-from .views import register
-from .views import login
-from .views import terms_conditions
-from .views import privacy_policy
-from .views import handling_music_file
+<<<<<<< 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
 
 
-from .views import pricing
-from .views import generate_pdf
-
 urlpatterns = [
     # path('', index, name='index'), <- uncomment when index/main page will be ready
     path('', index),
+
     path('user/', users, name='users'),
     path('404/', handler404),
     path('500/', handler500),
     path('maintenance/', maintenance),
     path('register/', register, name='register'),
-    path('login/', login, name='login'),
+    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'),
diff --git a/myproject/myapp/views.py b/myproject/myapp/views.py
index cfa8ed3c0d10a6aa466db187952e316b3a5e6363..0c4fea8ed905f4a3cc49a0927463f7e7cdeff0de 100644
--- a/myproject/myapp/views.py
+++ b/myproject/myapp/views.py
@@ -1,11 +1,17 @@
-from django.shortcuts import render
-from django.template import RequestContext
-import logging
+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
 
-from .forms import InstrumentDetectionForm
-from .models import Log, Action
 
 logger = logging.getLogger(__name__)
 
@@ -34,9 +40,8 @@ def handling_music_file(request):
     log_data = get_log_data(Action.invalid_file, 'error')
     # create_log(None, log_data)
     return HttpResponse('File invalid',log_data)
-from .models import User
-from django.http import HttpResponse
-from reportlab.pdfgen import canvas
+
+
 
 def index(request):
     #for now this authenication just returns the main view
@@ -69,11 +74,43 @@ def handler500(request, *args, **kwargs):
 def maintenance(request):
     return render(request, 'maintenance.html')
 
-def login(request):
-    return render(request, 'login.html')
+def user_login(request):
+    if request.method == 'POST':
+        form = LoginForm(request.POST)
+
+        if form.is_valid():
+            username = form.cleaned_data.get('username')
+            password = form.cleaned_data.get('password')
+
+            user = authenticate(request, username=username, password=password)  # Passing request along with username and password
+
+            if user:
+                login(request, user=user)  # Passing request along with user
+                return redirect('users')
+            else:
+                messages.error(request, 'Invalid username or password.')
+        else:
+            pass
+
+    else:
+        form = LoginForm()
+    return render(request, 'login.html', {'form': form})
+
 
 def register(request):
-    return render(request, 'register.html')
+    if request.method == 'POST':
+        form = CustomRegistrationForm(request.POST)
+        if form.is_valid():
+            form.save()
+            return redirect('user_login')
+    else:
+        form = CustomRegistrationForm()
+
+    return render(request, 'register.html', {'form': form})
+
+def user_logout(request):
+    logout(request)
+    return redirect('user_login')
 
 def terms_conditions(request):
     return render(request, 'terms_conditions.html')
diff --git a/myproject/myproject/settings.py b/myproject/myproject/settings.py
index ae24b76ecb344efe76bc54fa8d2c153678f04532..1725ba2e02c1db575915dd7a88a048763feab2c3 100644
--- a/myproject/myproject/settings.py
+++ b/myproject/myproject/settings.py
@@ -170,3 +170,5 @@ STATIC_URL = 'static/'
 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
 
 IMAGE_URL = 'static/src/images/'
+
+LOGIN_REDIRECT_URL = '/'
diff --git a/myproject/requirements.txt b/myproject/requirements.txt
index ba83400cc62f6f10a76948b71e3ca5b25081e705..770ecd9861ebf9de2482dfe22b18c693de53bf54 100644
--- a/myproject/requirements.txt
+++ b/myproject/requirements.txt
@@ -2,6 +2,7 @@ asgiref==3.7.2
 Django==5.0.1
 django-appconf==1.0.6
 django-compressor==4.4
+django-tailwind==3.8.0
 mysqlclient==2.2.3
 rcssmin==1.1.1
 rjsmin==1.2.1