diff --git a/README.md b/README.md
index 5614db31c485058c8277b93c72a82d02c6d04a21..2fbea1b49126914d1e0735096128777787818d57 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,51 @@
-## Panduan Pengerjaan
-Berikut adalah hal yang harus diperhatikan untuk pengumpulan tugas ini:
-1. Buatlah grup pada Gitlab dengan format "IF3110-2023-01-XX", dengan XX adalah nomor kelompok (untuk K1 dan K2) atau kode kelompok (untuk K3).
-2. Tambahkan anggota tim pada grup anda.
-3. **Fork** pada repository ini dengan organisasi yang telah dibuat.
-4. Ubah hak akses repository hasil Fork anda menjadi **private**.
-5. Hal-hal yang harus diperhatikan.
-    * Silakan commit pada repository anda (hasil fork)
-    * Lakukan beberapa commit dengan pesan yang bermakna, contoh: “add register form”, “fix logout bug”, jangan seperti “final”, “benerin dikit”, “fix bug”.
-    * Disarankan untuk tidak melakukan commit dengan perubahan yang besar karena akan mempengaruhi penilaian (contoh: hanya melakukan satu commit kemudian dikumpulkan).
-    * Commit dari setiap anggota tim akan mempengaruhi penilaian.
-    * Jadi, setiap anggota tim harus melakukan commit yang berpengaruh terhadap proses pembuatan aplikasi.
-    * Sebagai panduan bisa mengikuti [semantic commit](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716).
-6. Buatlah file README yang berisi:
-    * Deskripsi aplikasi web
-    * Daftar requirement
-    * Cara instalasi
-    * Cara menjalankan server
-    * Screenshot tampilan aplikasi (tidak perlu semua kasus, minimal 1 per halaman), dan 
-    * Penjelasan mengenai pembagian tugas masing-masing anggota (lihat formatnya pada bagian pembagian tugas).
+# TUGAS BESAR IF3110 PENGEMBANGAN APLIKASI BERBASIS WEB
+
+Untuk Tugas Besar 1 IF3110 Pengembangan Aplikasi Berbasis Web, kami dari Kelompok I mengembangkan *website* Saranghaengbok. Saranghaengbok ditujukan sebagai media jasa titip *merchandise* K-Pop. 
+
+## Requirement
+* Docker Desktop
+
+## Instalasi
+
+1. Clone repositori dengan *command* berikut
+```
+git clone https://gitlab.informatika.org/if3110-2023-01-i/tugas-besar-1.git
+```
+## Menjalankan Server
+
+1. Pindah ke direktori repositori
+```sh
+cd tugas-besar-1
+```
+2. Masukkan *command* berikut ke terminal
+```sh
+docker compose up --build
+``` 
+3. *Copy* dan *paste* tautan di bawah di *browser*
+```sh
+localhost:8008/client/pages/login-page.php
+```  
+4. Tekan "Enter"  
+
+
+## Tampilan Aplikasi
+
+<br/>
+<br/> <img src="public/signup.png" alt="sign up page" width="1280">
+<br/>
+<br/> <img src="public/signin.png" alt="sign in page" width="1280">
+<br>
+<br/> <img src="public/home.png" alt="catalog page" width="1280">
+<br>
+
+## Pembagian Tugas
+
+### Server-side
+Login : 13521009, 13521012  
+Register : 13521009, 13521012 
+
+
+### Client-side
+Login : 13521009, 13521012 
+Register : 13521009, 13521012 
+Sidebar : 13521009, 13521012, 13521020
\ No newline at end of file
diff --git a/client/css/user-manage.css b/client/css/user-manage.css
new file mode 100644
index 0000000000000000000000000000000000000000..70f06e707d49630fec14fa44051ff660db0504c4
--- /dev/null
+++ b/client/css/user-manage.css
@@ -0,0 +1,92 @@
+@import url('https://fonts.googleapis.com/css?family=Inter');
+
+*{
+    margin: 0;
+    padding: 0;
+    font-family: Inter;
+    box-sizing: border-box;
+    transition: 0.5;
+}
+
+.container{
+    max-width: 100%;
+    height: 100vh;
+    mix-blend-mode: multiply;
+    background-position: center;
+    background-size: cover;
+    display: flex;
+    flex-direction: column;
+}
+h1{
+    text-align: center;
+    padding: 10px;
+}
+
+.tablebox{
+    width: 100%;
+    position: relative;
+    overflow: scroll;
+    border :outset #5e5e5e thick;
+    height: 100vh;
+    padding: 10px;
+}
+
+#table-container{
+    width: 100%;
+    height: auto;
+    position: relative;
+
+}
+
+table, th, td {
+    border: 1px solid #ddd;
+    border-collapse: collapse;
+}
+  
+.fa-caret-down{
+    float: right;
+}
+
+table{
+    font-family: arial, sans-serif;
+    border-collapse: collapse;
+    width: 100%;
+    height: auto;
+}
+
+.contenttable{
+    cursor: pointer;
+}
+
+th {
+    padding: 20px;
+    text-align: left;
+    background-color: #5c12b1;
+    color: white;
+}
+
+
+td{
+    text-align: left;
+    padding: 10px;
+}
+
+
+tr:nth-child(even){
+    background-color: #f2f2f2;
+    text-align: left;
+    padding: 10px;
+}
+
+tr:nth-child(odd){
+    text-align: left;
+    padding: 10px;
+}
+
+tr:hover {
+    background-color: #ddd;
+}
+
+tr:active{
+    background: #8d8d8d;
+}
\ No newline at end of file
diff --git a/client/js/sidebar.js b/client/js/sidebar.js
index ae2c52dcd746e5f00535b91c2e106c2357d492eb..f04990ee4d4a850f48c9694df843bae4b219eb9b 100644
--- a/client/js/sidebar.js
+++ b/client/js/sidebar.js
@@ -27,9 +27,9 @@ addsidebar = () => {
         <i class="fa-solid fa-user-plus"></i>
           Add User 
     </a></li>
-    <li><a href='../pages/make-sale.php' id="additem"> 
+    <li><a href='../pages/make-sale.php' id="makesale"> 
         <i class="fa-solid fa-cart-plus"></i>
-          Add Item 
+          Make Sale
     </a></li>    
     <li><a href='../../server/controllers/signout.php' id="logout"> 
         <i class="fa-solid fa-right-from-bracket"></i>
diff --git a/client/js/user-manage.js b/client/js/user-manage.js
new file mode 100644
index 0000000000000000000000000000000000000000..00d535cd63d8f45a2d9ea7dcd4e9ae24576353c0
--- /dev/null
+++ b/client/js/user-manage.js
@@ -0,0 +1,47 @@
+
+function sendItem(username){
+    localStorage.setItem("username", username);
+    location.href =  "#";
+}
+
+function usertable(){
+    var tablecontainer = document.getElementById("table-container");
+    const formdata = new FormData();
+    formdata.append("signal", "sending");
+    
+    const xhr = new XMLHttpRequest();
+    xhr.open('GET', '../../server/controllers/user-manage.php', true);
+    //sending
+    xhr.send(formdata);
+    //get response from server
+    xhr.onreadystatechange = function(){
+        if (xhr.readyState === 4 && xhr.status === 200){
+            try{
+                var responseData = JSON.parse(xhr.responseText);
+                if (responseData.success){
+                    var itemList = "";
+                    itemList = responseData.data;
+                    tablecontainer.innerHTML = `
+                        <tr class="table-header">
+                            <th class="colUser"><i class="fa-solid fa-user"></i> Username <i class="fa-solid fa-caret-down"></i></th>
+                            <th class="colEmail"><i class="fa-solid fa-envelope"></i> Email <i class="fa-solid fa-caret-down"></i></th>
+                            <th class="colPass"><i class="fa-solid fa-lock"></i> Password <i class="fa-solid fa-caret-down"></i></th>
+                        </tr>`;
+                    for (var i = 0; i < itemList.length; i++){
+                        tablecontainer.innerHTML += `
+                        <tr class="contenttable" href="#" onclick="sendItem('${itemList[i][1]}')">
+                            <td>${itemList[i][1]}</td>
+                            <td>${itemList[i][0]}</td>
+                            <td>${itemList[i][2]}</td>
+                        </tr>`;
+                    }
+                } else {    
+                    alert("error: " + responseData.message);
+                }
+            } catch (err){}
+        } else if (xhr.status === 404){
+            var response = JSON.parse(xhr.responseText);
+            console.log(response.message);
+        }
+    }
+}
\ No newline at end of file
diff --git a/client/pages/user-manage.php b/client/pages/user-manage.php
new file mode 100644
index 0000000000000000000000000000000000000000..4ad4c09ac265f33747b4fdc849e0e99f5e21242f
--- /dev/null
+++ b/client/pages/user-manage.php
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta name="viewport" content="width=device-width, initial scale=1.0">
+    <title>Catalog</title>
+    <link rel="stylesheet" href="../css/user-manage.css">
+    <link rel="stylesheet" href="../css/navbar.css">
+    <link rel="stylesheet" href="../css/sidebar.css">
+    <script src="../js/navbar.js"></script>
+    <script src="../js/sidebar.js"></script>
+    <script src="../js/user-manage.js"></script>
+    <script src="https://kit.fontawesome.com/8505941c5b.js" crossorigin="anonymous"></script>
+</head>
+<body>
+    <div class="container">
+        <div class="tabgroup" id="tabgroup">
+            <script>
+                addnavbar();
+            </script>
+        </div>
+        <h1><i class="fa-solid fa-people-roof"></i> Manage User</h1>
+        <div class="tablebox">
+            <table id="table-container">
+                <script>
+                    usertable();
+                </script>
+            </table>
+        </div>
+        <div class="sidebar" id="sidebar">
+            <script>
+                addsidebar();
+            </script>
+        </div>
+    </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/home.png b/public/home.png
new file mode 100644
index 0000000000000000000000000000000000000000..b243e578ce6432faaba670c22c090b0b5939db8a
Binary files /dev/null and b/public/home.png differ
diff --git a/public/signin.png b/public/signin.png
new file mode 100644
index 0000000000000000000000000000000000000000..b82159195127f4531ba22b091b0d8c09b36eaca8
Binary files /dev/null and b/public/signin.png differ
diff --git a/public/signup.png b/public/signup.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c0112fc61098a6455aa3a34bafda6b40b8d3c99
Binary files /dev/null and b/public/signup.png differ
diff --git a/server/controllers/user-manage.php b/server/controllers/user-manage.php
new file mode 100644
index 0000000000000000000000000000000000000000..cd0b34882ab202c0217916c756415228b705c7c7
--- /dev/null
+++ b/server/controllers/user-manage.php
@@ -0,0 +1,28 @@
+<?php
+    require_once "connect_database.php";
+
+    if ($_SERVER["REQUEST_METHOD"] == "GET"){
+        $conn = connect_database();
+
+        $query = "SELECT * FROM user LIMIT 0, 200";
+        $stmt = $conn->prepare($query);
+
+        if (!$stmt){
+            die("Error in query preparation: ". $conn->error);
+        }
+        $result = $stmt->execute();
+
+        if (!$result){
+            die("Error in query execution: " . $stmt->error);
+        }
+
+        $resultSet = $stmt->get_result();
+        $rows = $resultSet->fetch_all();
+        if (!empty($rows)){
+            $response = array("success" => true, "message" => "data sent", "data" => $rows);
+        } else {
+            $response = array("success" => false, "message" => "Error: not found");
+        }
+        echo json_encode($response);
+        mysqli_close($conn);
+    }
\ No newline at end of file