diff --git a/app/templates/app/katalog_materi.html b/app/templates/app/katalog_materi.html
index 34051b5b01acc4892b0f15d9d751844c1cb17b78..bd49b2d93fc8ba0d0416e2088640618e17fc414e 100644
--- a/app/templates/app/katalog_materi.html
+++ b/app/templates/app/katalog_materi.html
@@ -75,7 +75,9 @@
             </div>
         </header>
 		
-		<a href="/download-history/" class="btn-history">Riwayat Unduh</a><br><br>
+        <a href="/download-history/" class="btn-history">Riwayat Unduh</a><br><br>
+        
+        <a href="?random=1" class="btn-history">Acak Materi</a><br><br>
 		
         <div class="container">
             <div class="row content">
diff --git a/app/tests.py b/app/tests.py
index 5c99fd002d2f7a4ce6f6eea2e78af092a2c1163e..303ed2861d9c2761193e344b0a297854bdb9d2f2 100644
--- a/app/tests.py
+++ b/app/tests.py
@@ -2274,6 +2274,49 @@ class MateriModelTest(TestCase):
         Like.objects.create(timestamp=datetime.now(), materi=self.materi, session_id="dummysessionid2")
         self.assertEqual(2, self.materi.like_count)
 
+class RandomizedMateriTest(TestCase):
+    def setUp(self):
+        self.contributor = User.objects.create(
+            email="kontributor@gov.id", password="passwordtest", name="kontributor", is_contributor=True
+        )
+
+        self.cover = SimpleUploadedFile("ExampleCover221.jpg", b"Test file")
+        self.content = SimpleUploadedFile("ExampleFile221.pdf", b"Test file")
+
+        self.materi = Materi.objects.create(
+            title="Materi 1",
+            author="Nandhika",
+            uploader=self.contributor,
+            publisher="Kelas SC",
+            descriptions="Deskripsi Materi 1",
+            status="APPROVE",
+            cover=self.cover,
+            content=self.content,
+            date_modified=datetime.now(),
+            date_created=datetime.now(),
+        )
+
+        self.materi = Materi.objects.create(
+            title="Materi 2",
+            author="Prayoga",
+            uploader=self.contributor,
+            publisher="Kelas SC",
+            descriptions="Deskripsi Materi 2",
+            status="APPROVE",
+            cover=self.cover,
+            content=self.content,
+            date_modified=datetime.now(),
+            date_created=datetime.now(),
+        )
+
+    def test_randomized_materi_returns_200(self):
+        response = Client().get("/?random=1")
+        self.assertEqual(response.status_code, 200)
+
+    def test_randomized_materi_remains_same_materi(self):
+        response = Client().get("/?random=1")
+        self.assertIn("Materi 1", response.content.decode())
+        self.assertIn("Materi 2", response.content.decode())
     
 class YearChoicesTest(TestCase):
     def test_release_year_contains_the_right_current_year(self):
diff --git a/app/views.py b/app/views.py
index a42118b080da8daf030d1b703c2f292072f7e4b6..66b96f602abe4c0033ad5efdb02ec8cd51f90950 100644
--- a/app/views.py
+++ b/app/views.py
@@ -39,6 +39,7 @@ from django.contrib import messages
 from pydrive.auth import GoogleAuth
 from pydrive.drive import GoogleDrive
 from pydrive.auth import AuthenticationRejected
+import random
 
 def permission_denied(request, exception, template_name="error_403.html"):
     return defaults.permission_denied(request, exception, template_name)
@@ -96,6 +97,10 @@ class DaftarKatalog(TemplateView):
             elif(getSort == "jumlah_unduh"):
                 lstMateri = lstMateri.annotate(count=Count('unduh__id')).order_by('-count')
 
+        should_random = bool(request.GET.get("random"))
+        if should_random:
+            lstMateri = random.sample(list(lstMateri), len(lstMateri))
+
         context["materi_list"] = lstMateri
         paginator = Paginator(context["materi_list"], 15)
         page_number = request.GET.get("page")