diff --git a/.coverage b/.coverage
index c03f4ed17121afd6a9e53b38c621bddf50286ad2..b52b7316149e0f56b03e30b56143a88a10e0da86 100644
Binary files a/.coverage and b/.coverage differ
diff --git a/app/migrations/0001_initial.py b/app/migrations/0001_initial.py
index bc8a74b085198558a9bd899e960d509f35c08b92..e696e5f4a6ab0f341fc477a193b2bb7271ac3069 100644
--- a/app/migrations/0001_initial.py
+++ b/app/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 3.0.3 on 2020-04-08 12:29
+# Generated by Django 3.0.3 on 2020-04-23 06:50
 
 from django.db import migrations, models
 
@@ -11,13 +11,37 @@ class Migration(migrations.Migration):
     ]
 
     operations = [
+        migrations.CreateModel(
+            name='Category',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=20)),
+                ('description', models.CharField(max_length=20)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Comment',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('user', models.CharField(default='9a6f72795672439b9734c222cbd8c4ce', max_length=100)),
+                ('profile', models.CharField(default='76035c', max_length=100)),
+                ('comment', models.CharField(default='comments', max_length=150)),
+            ],
+        ),
         migrations.CreateModel(
             name='Materi',
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('cover', models.URLField()),
-                ('title', models.CharField(max_length=50)),
-                ('author', models.CharField(max_length=30)),
+                ('cover', models.URLField(max_length=1000)),
+                ('title', models.CharField(default='title', max_length=50)),
+                ('author', models.CharField(default='author', max_length=30)),
+                ('uploader', models.CharField(default='uploader', max_length=30)),
+                ('publisher', models.CharField(default='publiser', max_length=30)),
+                ('descriptions', models.TextField(default='descriptions')),
+                ('uploadDate', models.DateField(auto_now=True)),
+                ('verified', models.BooleanField(default=False, null=True)),
+                ('categories', models.ManyToManyField(to='app.Category')),
+                ('comments', models.ManyToManyField(to='app.Comment')),
             ],
         ),
     ]
diff --git a/app/migrations/0002_auto_20200408_2115.py b/app/migrations/0002_auto_20200408_2115.py
deleted file mode 100644
index 461769ec421dbd0eb403f30fffac474321131c5f..0000000000000000000000000000000000000000
--- a/app/migrations/0002_auto_20200408_2115.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 3.0.3 on 2020-04-08 14:15
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('app', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='materi',
-            name='cover',
-            field=models.URLField(max_length=1000),
-        ),
-    ]
diff --git a/app/migrations/0003_auto_20200418_1452.py b/app/migrations/0003_auto_20200418_1452.py
deleted file mode 100644
index 46fb3cebf56ee037aecc36f88ff255d24b2b637c..0000000000000000000000000000000000000000
--- a/app/migrations/0003_auto_20200418_1452.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Generated by Django 3.0.3 on 2020-04-18 07:52
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('app', '0002_auto_20200408_2115'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Category',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=20)),
-                ('description', models.CharField(max_length=20)),
-            ],
-        ),
-        migrations.AddField(
-            model_name='materi',
-            name='descriptions',
-            field=models.CharField(default='SOME STRING', max_length=300),
-        ),
-        migrations.AddField(
-            model_name='materi',
-            name='publisher',
-            field=models.CharField(default='SOME STRING', max_length=30),
-        ),
-        migrations.AddField(
-            model_name='materi',
-            name='uploader',
-            field=models.CharField(default='SOME STRING', max_length=30),
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='author',
-            field=models.CharField(default='SOME STRING', max_length=30),
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='title',
-            field=models.CharField(default='SOME STRING', max_length=50),
-        ),
-        migrations.AddField(
-            model_name='materi',
-            name='categories',
-            field=models.ManyToManyField(to='app.Category'),
-        ),
-    ]
diff --git a/app/migrations/0004_auto_20200421_1557.py b/app/migrations/0004_auto_20200421_1557.py
deleted file mode 100644
index 0040574b324c057d168f4efbffc276bd4d5e1ac2..0000000000000000000000000000000000000000
--- a/app/migrations/0004_auto_20200421_1557.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Generated by Django 3.0.3 on 2020-04-21 08:57
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('app', '0003_auto_20200418_1452'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Comment',
-            fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('user', models.CharField(default='423a22c748b647d58f725be4ad1ffefb', max_length=100)),
-                ('profile', models.CharField(default='795364', max_length=100)),
-                ('comment', models.CharField(default='comments', max_length=200)),
-            ],
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='author',
-            field=models.CharField(default='author', max_length=30),
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='descriptions',
-            field=models.CharField(default='descriptions', max_length=300),
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='publisher',
-            field=models.CharField(default='publiser', max_length=30),
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='title',
-            field=models.CharField(default='title', max_length=50),
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='uploader',
-            field=models.CharField(default='uploader', max_length=30),
-        ),
-        migrations.AddField(
-            model_name='materi',
-            name='comments',
-            field=models.ManyToManyField(to='app.Comment'),
-        ),
-    ]
diff --git a/app/migrations/0005_auto_20200421_1625.py b/app/migrations/0005_auto_20200421_1625.py
deleted file mode 100644
index 59f6809e7c64b9a29ae789ce6f98758c87982270..0000000000000000000000000000000000000000
--- a/app/migrations/0005_auto_20200421_1625.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Generated by Django 3.0.3 on 2020-04-21 09:25
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('app', '0004_auto_20200421_1557'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='comment',
-            name='profile',
-            field=models.CharField(default='bdaac0', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='comment',
-            name='user',
-            field=models.CharField(default='22daa04c12aa4fc7878d6e3a84eec095', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='descriptions',
-            field=models.CharField(default='descriptions', max_length=200),
-        ),
-    ]
diff --git a/app/migrations/0006_auto_20200421_1633.py b/app/migrations/0006_auto_20200421_1633.py
deleted file mode 100644
index bcd0de1f2676262501b84acbc0bc060de23904df..0000000000000000000000000000000000000000
--- a/app/migrations/0006_auto_20200421_1633.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Generated by Django 3.0.3 on 2020-04-21 09:33
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('app', '0005_auto_20200421_1625'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='comment',
-            name='comment',
-            field=models.CharField(default='comments', max_length=150),
-        ),
-        migrations.AlterField(
-            model_name='comment',
-            name='profile',
-            field=models.CharField(default='4cee3b', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='comment',
-            name='user',
-            field=models.CharField(default='b2ea05df58014e768c7bafda3140e365', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='descriptions',
-            field=models.TextField(default='descriptions'),
-        ),
-    ]
diff --git a/app/migrations/0007_auto_20200421_2151.py b/app/migrations/0007_auto_20200421_2151.py
deleted file mode 100644
index 1ba9fc211ebbadb6b9ecfb25166ccb05755a3e31..0000000000000000000000000000000000000000
--- a/app/migrations/0007_auto_20200421_2151.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Generated by Django 3.0.3 on 2020-04-21 14:51
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('app', '0006_auto_20200421_1633'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='materi',
-            name='verified',
-            field=models.BooleanField(default=False),
-        ),
-        migrations.AlterField(
-            model_name='comment',
-            name='profile',
-            field=models.CharField(default='e0ff7f', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='comment',
-            name='user',
-            field=models.CharField(default='bd48a042721144bf80b64c2284c39f03', max_length=100),
-        ),
-    ]
diff --git a/app/migrations/0008_auto_20200422_2202.py b/app/migrations/0008_auto_20200422_2202.py
deleted file mode 100644
index 5b14ce8f01839ff8ba416738a1da64578fef8ee7..0000000000000000000000000000000000000000
--- a/app/migrations/0008_auto_20200422_2202.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 3.0.3 on 2020-04-22 15:02
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('app', '0007_auto_20200421_2151'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='comment',
-            name='profile',
-            field=models.CharField(default='d91905', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='comment',
-            name='user',
-            field=models.CharField(default='2565edd4bdac454d9cd87e2e7d93d27f', max_length=100),
-        ),
-    ]
diff --git a/app/migrations/0009_auto_20200422_2206.py b/app/migrations/0009_auto_20200422_2206.py
deleted file mode 100644
index d366787dfb542e3f78268d73de263cff824e0d5c..0000000000000000000000000000000000000000
--- a/app/migrations/0009_auto_20200422_2206.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Generated by Django 3.0.3 on 2020-04-22 15:06
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('app', '0008_auto_20200422_2202'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='comment',
-            name='profile',
-            field=models.CharField(default='cbacb3', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='comment',
-            name='user',
-            field=models.CharField(default='31d4991724a9498fb58b631db4636bff', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='materi',
-            name='verified',
-            field=models.BooleanField(default=False, null=True),
-        ),
-    ]
diff --git a/app/migrations/0010_auto_20200422_2206.py b/app/migrations/0010_auto_20200422_2206.py
deleted file mode 100644
index 4e614725cc6aede7efd98ed9249c41bbab27d07a..0000000000000000000000000000000000000000
--- a/app/migrations/0010_auto_20200422_2206.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 3.0.3 on 2020-04-22 15:06
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('app', '0009_auto_20200422_2206'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='comment',
-            name='profile',
-            field=models.CharField(default='e2db20', max_length=100),
-        ),
-        migrations.AlterField(
-            model_name='comment',
-            name='user',
-            field=models.CharField(default='e230956660bd4b899b4b81f03e6553a6', max_length=100),
-        ),
-    ]
diff --git a/app/models.py b/app/models.py
index 856a855c249f65044d7ddb6fa95711cdddd8ad57..cc3263a319e08d1137912ab2a024fe1eece5463a 100644
--- a/app/models.py
+++ b/app/models.py
@@ -35,6 +35,7 @@ class Materi(models.Model):
     uploader = models.CharField(max_length=30, default='uploader') #ubah jadi one to one ke kontributor 
     publisher = models.CharField(max_length=30, default='publiser')
     descriptions = models.TextField(default='descriptions')
+    uploadDate = models.DateField(auto_now=True)
     verified = models.BooleanField(default=False, null=True)
     categories = models.ManyToManyField(Category)
     comments = models.ManyToManyField(Comment)
diff --git a/authentication/templates/login.html b/authentication/templates/login.html
index e577c245caa3a3b0a7126bdd9207e1e98c8aa8e3..0dfae589ed5969411d1930b21e24b16e1fc0267b 100644
--- a/authentication/templates/login.html
+++ b/authentication/templates/login.html
@@ -1,31 +1,48 @@
+{% load static %}
+
 <!DOCTYPE html>
 <html lang="en">
 
 <head>
-    <title>Login DIGIPUS</title>
+    <title>Login Kontributor</title>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <!--===============================================================================================-->
-    <link rel="icon" type="image/png" href="../static/images/icons/logo.ico" />
-    <!--===============================================================================================-->
-    <link rel="stylesheet" type="text/css" href="../static/css/util.css">
-    <!--===============================================================================================-->
-    <link rel="stylesheet" type="text/css" href="../static/css/main.css">
+<!--===============================================================================================-->
+<link rel="icon" type="image/png" href="{% static 'images/icons/logo.ico' %}" />
+<!--===============================================================================================-->
+<link rel="stylesheet" type="text/css" href="{% static 'vendor/bootstrap/css/bootstrap.min.css' %}">
+<!--===============================================================================================-->
+<link rel="stylesheet" type="text/css" href="{% static 'fonts/font-awesome-4.7.0/css/font-awesome.min.css' %}">
+<!--===============================================================================================-->
+<!--===============================================================================================-->
+<link rel="stylesheet" type="text/css" href="{% static 'vendor/animate/animate.css' %}">
+<!--===============================================================================================-->
+<link rel="stylesheet" type="text/css" href="{% static 'vendor/css-hamburgers/hamburgers.min.css' %}">
+<!--===============================================================================================-->
+<link rel="stylesheet" type="text/css" href="{% static 'vendor/animsition/css/animsition.min.css' %}">
+<!--===============================================================================================-->
+<link rel="stylesheet" type="text/css" href="{% static 'vendor/select2/select2.min.css' %}">
+<!--===============================================================================================-->
+<link rel="stylesheet" type="text/css" href="{% static 'vendor/daterangepicker/daterangepicker.css' %}">
+<!--===============================================================================================-->
+<link rel="stylesheet" type="text/css" href="{% static 'css/styles.css' %}">
+<link rel="stylesheet" type="text/css" href="{% static 'css/util.css' %}">
+<link rel="stylesheet" type="text/css" href="{% static 'css/main.css' %}">
     <!--===============================================================================================-->
 </head>
 
-<body style="background-color: #f7f7f7;">
+<body style="background-color: #666666;">
 
     <div class="limiter">
 
         <div class="container-login100">
 
             <div class="wrap-login100">
-                <form class="login100-form validate-form" method="POST" action="">
-                    
+                <form class="login100-form validate-form" method="POST">
                     {% csrf_token %}
+
                     <div class="login100-form-title p-b-43">
-                        Login Kontributor
+                        Halo, kontributor
                     </div>
 
 
@@ -39,26 +56,28 @@
                     <div class="wrap-input100 validate-input" data-validate="Password is required">
                         <input class="input100" type="password" name="pass">
                         <span class="focus-input100"></span>
-                        <span class="label-input100">Password</span>
+                        <span class="label-input100">Kata Sandi</span>
                     </div>
 
                     <div class="flex-sb-m w-full p-t-3 p-b-32">
-                        <div class="contact100-form-checkbox">
-                            <a href="#" class="txt1">
+
+                        <div>
+                            <a href="/registrasi/" class="txt1">
                                 Belum mendaftar? klik di sini
                             </a>
                         </div>
+
                     </div>
 
+
                     <div class="container-login100-form-btn">
-                        <button class="login100-form-btn">
+                        <button class="login100-form-btn" type="submit">
                             Login
                         </button>
                     </div>
-
                 </form>
 
-                <div class="login100-more" style="background-image: url('../static/images/bg-03.jpg');">
+                <div class="login100-more" style="background-image: url('../../static/images/bg-03.jpg');">
                 </div>
 
             </div>
@@ -68,6 +87,18 @@
     <!--===============================================================================================-->
     <script src="../static/vendor/jquery/jquery-3.2.1.min.js"></script>
     <!--===============================================================================================-->
+    <script src="../static/vendor/animsition/js/animsition.min.js"></script>
+    <!--===============================================================================================-->
+    <script src="../static/vendor/bootstrap/js/popper.js"></script>
+    <script src="../static/../static/../static/../static/../static/../static/vendor/bootstrap/js/bootstrap.min.js"></script>
+    <!--===============================================================================================-->
+    <script src="../static/../static/../static/../static/../static/vendor/select2/select2.min.js"></script>
+    <!--===============================================================================================-->
+    <script src="../static/../static/../static/../static/vendor/daterangepicker/moment.min.js"></script>
+    <script src="../static/../static/../static/vendor/daterangepicker/daterangepicker.js"></script>
+    <!--===============================================================================================-->
+    <script src="../static/../static/vendor/countdowntime/countdowntime.js"></script>
+    <!--===============================================================================================-->
     <script src="../static/js/login.js"></script>
 
 </body>
diff --git a/authentication/templates/login_admin.html b/authentication/templates/login_admin.html
index edb0cc3e2b3a10880ff6b22e96e4348f1767fbad..b5bce529229dab01f053404646575ace9b3cebc6 100644
--- a/authentication/templates/login_admin.html
+++ b/authentication/templates/login_admin.html
@@ -1,3 +1,5 @@
+{% load static %}
+
 <!doctype html>
 <html lang="en">
 
@@ -8,15 +10,28 @@
 
     <!-- CSS  -->
     <link rel="stylesheet" href="../static/css/login_admin.css">
-    <link rel="stylesheet" type="text/css" href="../static/css/util.css">
-    <link rel="stylesheet" type="text/css" href="../static/css/main.css">
 
     <!--===============================================================================================-->
-    <link rel="icon" type="image/png" href="../static/images/icons/logo.ico" />
+    <link rel="icon" type="image/png" href="{% static 'images/icons/logo.ico' %}" />
+    <!--===============================================================================================-->
+    <link rel="stylesheet" type="text/css" href="{% static 'vendor/bootstrap/css/bootstrap.min.css' %}">
+    <!--===============================================================================================-->
+    <link rel="stylesheet" type="text/css" href="{% static 'fonts/font-awesome-4.7.0/css/font-awesome.min.css' %}">
+    <!--===============================================================================================-->
+    <!--===============================================================================================-->
+    <link rel="stylesheet" type="text/css" href="{% static 'vendor/animate/animate.css' %}">
+    <!--===============================================================================================-->
+    <link rel="stylesheet" type="text/css" href="{% static 'vendor/css-hamburgers/hamburgers.min.css' %}">
+    <!--===============================================================================================-->
+    <link rel="stylesheet" type="text/css" href="{% static 'vendor/animsition/css/animsition.min.css' %}">
+    <!--===============================================================================================-->
+    <link rel="stylesheet" type="text/css" href="{% static 'vendor/select2/select2.min.css' %}">
     <!--===============================================================================================-->
-    <link rel="stylesheet" type="text/css" href="../static/vendor/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" type="text/css" href="{% static 'vendor/daterangepicker/daterangepicker.css' %}">
     <!--===============================================================================================-->
-    <link rel="stylesheet" type="text/css" href="../static/fonts/font-awesome-4.7.0/css/font-awesome.min.css">
+    <link rel="stylesheet" type="text/css" href="{% static 'css/styles.css' %}">
+    <link rel="stylesheet" type="text/css" href="{% static 'css/util.css' %}">
+    <link rel="stylesheet" type="text/css" href="{% static 'css/main.css' %}">
     <!--===============================================================================================-->
 
 </head>
@@ -37,38 +52,35 @@
                     </div>
 
                     <div class="work_info">
+                        <form class="login100-form validate-form" method="POST">
+                            {% csrf_token %}
 
-                        <head>
                             <div class="login100-form-title p-b-43">
-                                <img src="../static/images/logo.png" style="width:100px;height:100px;border:0;">
+                                Halo, Admin
                             </div>
-                        </head>
 
-                        
-
-                        <div class="login100-form-title p-b-43">
-                            Halo, Admin
-                        </div>
-
-                        <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz">
-                            <input class="input100" type="text" name="email">
-                            <span class="focus-input100"></span>
-                            <span class="label-input100">Email</span>
-                        </div>
-
-
-                        <div class="wrap-input100 validate-input" data-validate="Password is required">
-                            <input class="input100" type="password" name="pass">
-                            <span class="focus-input100"></span>
-                            <span class="label-input100">Password</span>
-                        </div>
+                            <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz">
+                                <input class="input100" type="text" name="email">
+                                <span class="focus-input100"></span>
+                                <span class="label-input100">Email</span>
+                            </div>
+                            
+                            
+                            <div class="wrap-input100 validate-input" data-validate="Password is required">
+                                <input class="input100" type="password" name="pass">
+                                <span class="focus-input100"></span>
+                                <span class="label-input100">Kata Sandi</span>
+                            </div>
 
-                        <div class="container-login100-form-btn">
-                            <button class="login100-form-btn">
-                                Login
-                            </button>
-                        </div>
+                            <br>
+                            </br>
 
+                            <div class="container-login100-form-btn">
+                                <button class="login100-form-btn" type="submit">
+                                    Login
+                                </button>
+                            </div>
+                        </form>
                     </div>
                 </div>
             </div>
@@ -93,7 +105,7 @@
     <!--===============================================================================================-->
     <script src="../static/../static/vendor/countdowntime/countdowntime.js"></script>
     <!--===============================================================================================-->
-    <script src="../static/js/halaman_login.js"></script>
+    <script src="../static/js/login.js"></script>
 
 </body>
 
diff --git a/authentication/tests.py b/authentication/tests.py
index 95a4c45033f3ec6a6ee821b84b5e52fc12d01844..484663e49ed4cc03ad186eac46a1ab91b6501cfd 100644
--- a/authentication/tests.py
+++ b/authentication/tests.py
@@ -2,23 +2,48 @@ from django.test import TestCase, Client, RequestFactory
 from django.urls import resolve
 from authentication.views import Login
 from authentication.models import User
-from .views import login_admin
 
-class LoginPageTest(TestCase):
+class LoginPageContributorTest(TestCase):
     def setUp(self):
-        User.objects._create_user(email="alice@acme.com", password="acmecorp")
+        User.objects._create_user(email="alice@acme.com", password="acmecorp", is_contributor=True)
 
-    def test_login_url_exists(self):
+    def test_login_contributor_using_login_func(self):
+        found = resolve('/login/')
+        self.assertEqual(found.func.__name__, Login.as_view().__name__)
+
+    def test_login_contributor_url_is_exist(self):
+        # Positive tests
         response = Client().get('/login/')
         self.assertEqual(response.status_code, 200)
 
-    def test_template(self):
+        # Negative tests
+        response = Client().get('/fake/')
+        self.assertEqual(response.status_code, 404)
+    
+    def test_login_contributor_template(self):
+        url = "/login/"
+        response = Client().get(url)
+        expected_template_name = "login.html"
+        self.assertTemplateUsed(response, expected_template_name)
+
+    def test_register_title(self):
         response = Client().get('/login/')
-        self.assertTemplateUsed(response, 'login.html')
 
-    def test_login_using_login_func(self):
-        found = resolve('/login/')
-        self.assertEqual(found.func.__name__, Login.as_view().__name__)
+        # Positive tests
+        self.assertContains(response, 'Login Kontributor')
+
+        # Negative tests
+        self.assertNotContains(response, 'Fake Title')
+
+    def test_register_form_field(self):
+        response = Client().get('/login/')
+
+        # Positive tests
+        self.assertContains(response, 'Email')
+        self.assertContains(response, 'Kata Sandi')
+
+        # Negative tests
+        self.assertNotContains(response, 'Jenis Kelamin')
 
     def test_user_login_missing_email_or_password(self):
         response = Client().post('/login/', {'email': 'alice@acme.com'})
@@ -109,41 +134,72 @@ class UserModelTest(TestCase):
         self.assertTrue(superuser.is_superuser)
 
 
-class Login_AdminPageTest(TestCase):
-    def test_register_url_is_exist(self):
-        # Positive tests
-        response = Client().get('/login_admin/')
-        self.assertEqual(response.status_code, 200)
-
-        # Negative tests
-        response = Client().get('/fake/')
-        self.assertEqual(response.status_code, 404)
+class LoginPageAdminTest(TestCase):
+    def setUp(self):
+        User.objects._create_user(email="alice@acme.com", password="acmecorp", is_admin=True)
 
-    def test_status_using_index_func(self):
-        # Positive tests
+    def test_login_admin_using_login_func(self):
         found = resolve('/login_admin/')
-        self.assertEqual(found.func, login_admin)
+        self.assertEqual(found.func.__name__, Login.as_view().__name__)
 
-        # Negative tests
-        found = resolve('/admin/')
-        self.assertNotEqual(found.func, login_admin)
+    def test_login_admin_template(self):
+        url = "/login_admin/"
+        response = Client().get(url)
+        expected_template_name = "login_admin.html"
+        self.assertTemplateUsed(response, expected_template_name)
+        
+    def test_login_admin_url_is_exist(self):
+        # Positive tests
+        response = Client().get('/login_admin/')
+        self.assertEqual(response.status_code, 200)
     
     def test_register_title(self):
         response = Client().get('/login_admin/')
 
         # Positive tests
-        self.assertContains(response, 'Login Admin')
-
-        # Negative tests
-        self.assertNotContains(response, 'Fake Title')
+        self.assertContains(response, 'Halo, Admin')
 
-    def test_register_form_field(self):
+    def test_login_admin_form_field(self):
         response = Client().get('/login_admin/')
 
         # Positive tests
         self.assertContains(response, 'Email')
-        self.assertContains(response, 'Password')
+        self.assertContains(response, 'Kata Sandi')
 
-        # Negative tests
-        self.assertNotContains(response, 'Jenis Kelamin')
+    def test_user_login_missing_email_or_password(self):
+        response = Client().post('/login_admin/', {'email': 'alice@acme.com'})
+        self.assertIn('error_message', response.context_data)
+        self.assertIn("Email atau Password anda kosong.",
+                      response.context_data['error_message'])
+        response = Client().post('/login_admin/', {'pass': 'acmecorp'})
+        self.assertIn('error_message', response.context_data)
+        self.assertIn("Email atau Password anda kosong.",
+                      response.context_data['error_message'])
+
+    def test_user_login_wrong_email_or_password(self):
+        # Wrong password
+        response = Client().post(
+            '/login_admin/', {'email': 'alice@acme.com', 'pass': 'acmeindustry'})
+        self.assertIn('error_message', response.context_data)
+        self.assertIn("Email atau Password anda salah.",
+                      response.context_data['error_message'])
+        # Wrong email
+        response = Client().post(
+            '/login_admin/', {'email': 'alice@acme.co.id', 'pass': 'acmecorp'})
+        self.assertIn('error_message', response.context_data)
+        self.assertIn("Email atau Password anda salah.",
+                      response.context_data['error_message'])
+        # Wrong email and password
+        response = Client().post(
+            '/login_admin/', {'email': 'alice@acme.co.id', 'pass': 'acmeindustry'})
+        self.assertIn('error_message', response.context_data)
+        self.assertIn("Email atau Password anda salah.",
+                      response.context_data['error_message'])
+
+    def test_user_login(self):
+        # 302 meaning successful login and redirected
+        response = Client().post(
+            '/login_admin/', {'email': 'alice@acme.com', 'pass': 'acmecorp'})
+        self.assertEqual(302, response.status_code)
 
+        
\ No newline at end of file
diff --git a/authentication/urls.py b/authentication/urls.py
index 49a16496c930193f30eab4451e4b9142b71cc970..6510358ff91953d94950fb2196a7658d4a09e493 100644
--- a/authentication/urls.py
+++ b/authentication/urls.py
@@ -1,9 +1,9 @@
 from django.urls import path
-from authentication.views import Login, login_admin
+from authentication.views import Login
 from django.contrib.auth.views import LogoutView
 
 urlpatterns = [
-    path('login/', Login.as_view()),
-    path('login_admin/', login_admin, name='login_admin'),
+    path('login/', Login.as_view(), name='login_admin'),
+    path('login_admin/', Login.as_view(), name='login_admin'),
     path('logout/', LogoutView.as_view()),
 ]
\ No newline at end of file
diff --git a/authentication/views.py b/authentication/views.py
index ae28b170bb98308a3feeedf9db26a745fb70c02b..a0189ebab1b8c683d775f772ba57d7af0409b6df 100644
--- a/authentication/views.py
+++ b/authentication/views.py
@@ -6,7 +6,13 @@ from django.contrib.auth.views import LogoutView
 
 
 class Login(TemplateView):
-    template_name = 'login.html'
+
+    def get_template_names(self):
+        if self.request.path == '/login_admin/':
+            template_name = 'login_admin.html'
+        else:
+            template_name = 'login.html'
+        return template_name
 
     def get_context_data(self, *args, **kwargs):
         context = super().get_context_data(**kwargs)
@@ -33,7 +39,3 @@ class Login(TemplateView):
                 context = self.get_context_data(*args, **kwargs)
                 context["error_message"] = "Email atau Password anda salah."
                 return self.render_to_response(context=context)
-
-# Create your views here.
-def login_admin(request):
-    return render(request, 'login_admin.html')
diff --git a/register/templates/index.html b/register/templates/index.html
index f1d0836e2d15c90f911b41b50f4cbe8806420eb9..58f9a1701bec16abc14f7ca460fb5fb7c5b7690f 100644
--- a/register/templates/index.html
+++ b/register/templates/index.html
@@ -31,27 +31,7 @@
     <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet">
 </head>
 <body style="background-color: #666666;">
-    <header class="main-header" id="main-header">
-        <div>
-            <a href="#" class="main-header__brand">
-                Diskominfo Kota Depok
-            </a>
-        </div><nav class="main-nav">
-            <ul class="main-nav__items">
-                <li class="main-nav__item">
-                    <a href="#">Unggah</a>
-                </li>
-                <li class="main-nav__item">
-                    <a href="#">Akun</a>
-                </li>
-                <li class="main-nav__item">
-                    <a href="#">
-                        <img src="{% static 'img/profile.jpg' %}" class="main-nav__item-img">
-                    </a>
-                </li>
-            </ul>
-        </nav>
-    </header>
+    
     <main>
         <div class="limiter">
             <div class="container-login100">
@@ -111,11 +91,24 @@
                             <span class="focus-input100"></span>
                             <span class="label-input100">Ketik Ulang Kata Sandi</span>
                         </div>
+
+            
                         <div class="container-login100-form-btn">
                             <button class="login100-form-btn">
                                 Daftar
                             </button>
                         </div>
+
+                        <div class="flex-sb-m w-full p-t-3 p-b-32">
+                        
+                            <div>
+                                <a href="/login/" class="txt1">
+                                    Kembali ke halaman login
+                                </a>
+                            </div>
+                        
+                        </div>
+
                     </form>
                     <div class="login100-more" style="background-image: url('../static/images/bg-03.jpg'); z-index: 0;">
                     </div>
diff --git a/requirements.txt b/requirements.txt
index 9a93cbdca36da21938762394a8e92274ab597194..dbfbd538dc4e054a34a216f834b2ddbf3331adba 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -30,4 +30,5 @@ typed-ast==1.4.1
 wcwidth==0.1.9
 whitenoise==5.0.1
 wrapt==1.11.2
-zipp==3.1.0
\ No newline at end of file
+zipp==3.1.0
+Pillow==7.1.1
\ No newline at end of file
diff --git a/sonar-project.properties b/sonar-project.properties
index 6698a46b860b8b3dcfe38e6fa1c02369400608d4..8ef13a8bdcd322e265a0a36ff3b533387a69043a 100644
--- a/sonar-project.properties
+++ b/sonar-project.properties
@@ -9,7 +9,7 @@ sonar.projectKey=$SONARQUBE_PROJECT_KEY
 
 ## Path to sources
 sonar.sources=.
-sonar.exclusions=**/migrations/**, **/__init__.py, digipus/**, **/test.py, manage.py, .vscode/**, static/**, staticfiles/**,static/admin/**
+sonar.exclusions=**/migrations/**, **/__init__.py, digipus/**, **/test.py, manage.py, .vscode/**, static/**, staticfiles/**, static/admin/**, **/static/**
 # sonar.inclusions=
 
 ## Path to tests
@@ -24,4 +24,4 @@ sonar.sourceEncoding=UTF-8
 sonar.branch.name=$CI_COMMIT_REF_NAME
 
 ## Coverage Report
-sonar.python.coverage.reportPath=coverage.xml
\ No newline at end of file
+sonar.python.coverage.reportPaths=coverage.xml
\ No newline at end of file
diff --git a/static/css/main.css b/static/css/main.css
index 5b6cb549af4f995c451a98dad560dbb1bbe9bea7..9c391d674c7dba1b166775d637c900089d83b0d7 100644
--- a/static/css/main.css
+++ b/static/css/main.css
@@ -260,7 +260,7 @@ iframe {
   min-height: 100vh;
   display: block;
   background-color: #f7f7f7;
-  padding: 100px 55px 55px 55px;
+  padding: 173px 55px 55px 55px;
 }
 
 .login100-form-title {
diff --git a/static/css/main.css.gz b/static/css/main.css.gz
index 9af0aa38681d7f50a31e1c65318ccdcb7746d176..f91f45791ce19306322bf0567c3c94b67f8d501e 100644
Binary files a/static/css/main.css.gz and b/static/css/main.css.gz differ
diff --git a/staticfiles/css/main.css b/staticfiles/css/main.css
index 5b6cb549af4f995c451a98dad560dbb1bbe9bea7..9c391d674c7dba1b166775d637c900089d83b0d7 100644
--- a/staticfiles/css/main.css
+++ b/staticfiles/css/main.css
@@ -260,7 +260,7 @@ iframe {
   min-height: 100vh;
   display: block;
   background-color: #f7f7f7;
-  padding: 100px 55px 55px 55px;
+  padding: 173px 55px 55px 55px;
 }
 
 .login100-form-title {