diff --git a/app/migrations/0026_submitvisitor.py b/app/migrations/0026_submitvisitor.py
new file mode 100644
index 0000000000000000000000000000000000000000..b8497c75b257983dd84ea6b3cbc8b5228f6cd29d
--- /dev/null
+++ b/app/migrations/0026_submitvisitor.py
@@ -0,0 +1,24 @@
+# Generated by Django 3.1 on 2020-10-29 13:45
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('app', '0025_review'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='SubmitVisitor',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('user_id', models.CharField(max_length=50)),
+                ('email', models.CharField(max_length=50)),
+                ('msg', models.CharField(max_length=100)),
+                ('timestamp', models.DateTimeField(default=django.utils.timezone.now)),
+            ],
+        ),
+    ]
diff --git a/app/models.py b/app/models.py
index da7ee4c437b7774855f2ce326184011467ca351d..f50c904311702c26984f43b30fde58c3ee278f57 100644
--- a/app/models.py
+++ b/app/models.py
@@ -197,6 +197,12 @@ class ReqMaterial(models.Model):
     title = models.CharField(max_length=100)
     timestamp = models.DateTimeField(default=timezone.now)
 
+class SubmitVisitor(models.Model):
+    user_id = models.CharField(max_length=50)
+    email = models.CharField(max_length=50)
+    msg = models.CharField(max_length=100)
+    timestamp = models.DateTimeField(default=timezone.now)
+
 
 class ViewStatistics(models.Model):
     materi = models.ForeignKey(Materi, models.SET_NULL, null=True, related_name="baca")
diff --git a/app/templates/app/katalog_materi.html b/app/templates/app/katalog_materi.html
index fa2665103a32ea28fe8fda9be4d708815a4455b1..cda16faa7708ab42db1e5383b396fecb99f12de1 100644
--- a/app/templates/app/katalog_materi.html
+++ b/app/templates/app/katalog_materi.html
@@ -70,6 +70,8 @@
                                 href="/req-materi">disini</a></p>
                         <p class="pageTitle">Ingin diskusi lebih mendalam? Silahkan kunjungi <a
                                 href="{% url 'forum_home' %}">forum kami</a></p>
+                        <p class="pageTitle">Terima kasih sudah berkunjung, mohon isi buku tamu terlebih dahulu <a
+                                href="/submit-visitor">disini</a> jika kamu sudah terdaftar!</p>
                     </div>
                 </div>
             </div>
diff --git a/app/templates/submit_visitor.html b/app/templates/submit_visitor.html
new file mode 100644
index 0000000000000000000000000000000000000000..529b2e8b9c7f559705db59abf0d38ec9e24ddb77
--- /dev/null
+++ b/app/templates/submit_visitor.html
@@ -0,0 +1,146 @@
+{% extends "base.html" %}
+{% load static %}
+{% block title %}Digipus Home{% endblock %}
+{% block header %}
+
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <title>Digipus Home</title>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    <link rel="stylesheet" type="text/css" href="{% static 'app/css/katalog_materi.css' %}">
+
+    <!-- Bootstrap core CSS -->
+    <link href="../../static/app/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
+
+    <!-- Custom styles for this template -->
+    <link href="../../static/app/css/heroic-features.css" rel="stylesheet">
+
+    <!--===============================================================================================-->
+    <link rel="icon" type="image/png" href="{% static 'images/icons/logo.ico' %}" />
+    <!--===============================================================================================-->
+    <!--===============================================================================================-->
+    <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' %}">
+    <!--===============================================================================================-->
+
+{% endblock header %}
+{% block content %}
+
+</head>
+
+<body style="background-color: #f8f8f8;">
+<!-- Page Content -->
+    <div class="container">
+
+        <header class="jumbotron my-4">
+            <div class="container">
+                <div class="row header">
+                    <div class="col">
+                        <h2 class="pageTitle">Hi! {{ user.name }} Selamat datang di halaman buku tamu!</h2>
+                        <input type="hidden" id="user_id" name="user_id" value="{{ user.id}}"/>
+                        <input type="hidden" id="email" name="email" value="{{ user.email}}"/>
+                        {% if user %}
+                        <p class="description">Sampaikan pesan dan kesan kamu terhadap aplikasi ini</p>
+                        {% else %}
+                        <p class="description">Sampaikan pesan dan kesan kamu terhadap aplikasi ini</p>
+                        {% endif %}
+                        <form class="searchBar" >
+                             {% csrf_token %}
+                            <div class="col-6 form-group">
+                                <input type="text" name='search' class="form-control" placeholder="Tulis di sini" id="title" value="" required>
+                            </div>
+                            <button id="btn_req_submit" style="width: auto;padding-left: 10px;padding-right: 10px;" class="btn btn-cari">Submit pesan ke buku tamu</button>
+                        </form>
+                        <p id="msg" style="display: none;margin: 5px">Buku Tamu berhasil ditambahkan</p>
+                    </div>
+                </div>
+            </div>    
+        </header>
+        
+        
+    </div>
+    
+<!-- /.container -->
+</body>
+
+</html>
+<script src="https://kit.fontawesome.com/bc2cedd6b2.js" crossorigin="anonymous"></script>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
+<script type="text/javascript">
+    var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
+</script>
+<script>
+    function csrfSafeMethod(method) {
+        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
+    }
+</script>
+<script type="text/javascript">
+$('#btn_req_submit').click(function () {
+    var title = document.getElementById('title');
+    var msg =  document.getElementById('msg');
+    var user_id =  document.getElementById('user_id');
+    var email =  document.getElementById('email');
+
+    if (title.value == ''){
+        return;
+    }
+    $.ajaxSetup({
+        beforeSend: function (xhr, settings) {
+            if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
+                xhr.setRequestHeader("X-CSRFToken", csrftoken);
+            }
+        }
+    });
+    
+    $.ajax({
+        type: 'POST',
+        url: "{% url 'submit-visitor' %}",
+        data: {
+            'title': title.value,
+            'user_id': user_id.value,
+            'email': email.value,
+        },
+        success: function(Json) { 
+            /* clear the error message first */
+            if (Json.success){
+                swal("Informasi!", Json.msg, "success");
+                msg.style.display = 'block';
+                title.value = "";
+                setTimeout(function(){ $("#msg").fadeOut("slow"); }, 3000);    
+            }else{
+                swal("Informasi!", Json.msg, "error");   
+                msg.style.display = 'block';
+                setTimeout(function(){ $("#msg").fadeOut("slow"); }, 3000);     
+            }
+        },
+        error: function (xhr, status, errorThrown) {
+            xhr.status;
+            swal("Error!",  xhr.responseText, "error");
+            xhr.responseText;
+        }
+    });
+    return false;
+});
+</script>
+{% endblock %}
+
+    
\ No newline at end of file
diff --git a/app/urls.py b/app/urls.py
index 8dc4c529ed3eb8f87da45782a019c02805717412..a8c7281cbdd6821bf7eace5f939520e099f53ad5 100644
--- a/app/urls.py
+++ b/app/urls.py
@@ -5,7 +5,7 @@ from app import views
 from app.views import (DashboardKontributorView, ProfilView,
                        SuksesLoginAdminView, SuksesLoginKontributorView, DownloadHistoryView,
                        SuntingProfilView, UploadMateriHTML, UploadMateriView, UploadMateriExcelView, PostsView,
-                       ReqMateriView, KatalogPerKontributorView, MateriFavorite, PasswordChangeViews, password_success)
+                       ReqMateriView, KatalogPerKontributorView, MateriFavorite, PasswordChangeViews, password_success, SubmitVisitorView)
 
 
 urlpatterns = [
@@ -40,4 +40,5 @@ urlpatterns = [
     path("change-password/", PasswordChangeViews.as_view(template_name='change-password.html')),
     path("password_success/", views.password_success, name="password_success"),
     path("given-rating/", views.see_given_rating, name="see_given_rating"),
+    path("submit-visitor/", SubmitVisitorView.as_view(), name="submit-visitor"),
 ]
diff --git a/app/views.py b/app/views.py
index 48166f33b0a1e21fb6e1c77f0fe7b113c67b6e2a..a6c7ca187c0acdf4f0b91e705297c4264f5733c5 100644
--- a/app/views.py
+++ b/app/views.py
@@ -31,6 +31,7 @@ from app.models import (
     Materi,
     ReqMaterial,
     Rating, RatingContributor,
+    SubmitVisitor
 )
 from authentication.models import User
 from .services import DafterKatalogService, DetailMateriService, LikeDislikeService, MateriFieldValidationHelperService, \
@@ -721,3 +722,28 @@ def see_given_rating(request):
         return render(request, 'given-rating.html',
                       context={'rating_list': rating_list, 'order_by_key': order_by_key, 'order_by': order_by})
     return permission_denied(request, exception=None)
+
+class SubmitVisitorView(TemplateView):
+    template_name = "submit_visitor.html"
+
+    def dispatch(self, request, *args, **kwargs):
+        if request.user.is_authenticated == False:
+            return HttpResponseRedirect("/login/")
+        return super(SubmitVisitorView, self).dispatch(request, *args, **kwargs)
+
+    def get_context_data(self, **kwargs):
+        context = super(SubmitVisitorView, self).get_context_data(**kwargs)
+        return context
+
+    def get(self, request, *args, **kwargs):
+        context = self.get_context_data(**kwargs)
+        return self.render_to_response(context)
+
+    def post(self, request, *args, **kwargs):
+        title = request.POST.get("title", None)
+        email = request.POST.get("email", None)
+        user_id = request.POST.get("user_id", None)
+        if title is None:
+            return JsonResponse({"success": False, "msg": "Missing parameter"})
+        SubmitVisitor(msg=title, user_id=user_id, email=email).save()
+        return JsonResponse({"success": True, "msg": "Buku tamu berhasil ditambahkan"})