diff --git a/src/Controllers/DormController.php b/src/Controllers/DormController.php
index a23b45b309bf646161ec5021335039b581a27eb5..86dcbd81da8587eb9b45e3933c52eec692ca40e0 100644
--- a/src/Controllers/DormController.php
+++ b/src/Controllers/DormController.php
@@ -114,6 +114,19 @@ class DormController extends Controller
     ]);
   }
 
+  public function deleteMedia($params)
+  {
+    $form = new Validation([
+      [new Field("media_id"), [new Number()]]
+    ]);
+    if ($form->validate(Request::getBody())) {
+      $media = Media::findById($form->data["media_id"]);
+      $dormId = $media->dorm_id;
+      $media->delete();
+    }
+    Response::redirect("/dorms/{$dormId}/media");
+  }
+
   private function uploadMedia($files, $dorm_id)
   {
     foreach ($files["name"] as $index => $name) {
diff --git a/src/Core/Application.php b/src/Core/Application.php
index f969a3003c61fdbebaf5d3196f2c79317978b083..27f4350194d455ea685dfdfa0b1a581e2fe050ab 100644
--- a/src/Core/Application.php
+++ b/src/Core/Application.php
@@ -49,16 +49,17 @@ class Application
     $this->router->methods(["GET", "POST"], "/dorms/create", [AdminOnly::class], DormController::class, 'create');
     $this->router->methods(["GET", "POST"], "/dorms/{dormId}", [AuthRequired::class], DormController::class, 'view');
     $this->router->methods(["GET", "POST"], "/dorms/{dormId}/media", [AdminOnly::class], DormController::class, 'media');
+    $this->router->delete("/dorms/{dormId}/media", [AdminOnly::class], DormController::class, 'deleteMedia');
     $this->router->methods(["GET", "POST"], "/dorms/{dormId}/edit", [AdminOnly::class], DormController::class, 'edit');
     $this->router->methods(["GET", "POST"], "/dorms/{dormId}/reviews", [AuthRequired::class], ReviewController::class, 'getAllByDormId');
     $this->router->methods(["GET", "POST"], "/dorms/{dormId}/add-review", [AuthRequired::class], ReviewController::class, 'create');
-  
+
     $this->router->methods(["GET", "POST"], "/account/edit", [AuthRequired::class],  UserController::class, 'edit');
     $this->router->methods(["GET", "POST"], "/account/editPassword", [AuthRequired::class],  UserController::class, 'editPassword');
-    
+
     $this->router->methods(["GET", "POST"], "/reviews/{reviewId}", [AuthRequired::class], ReviewController::class, 'edit');
     $this->router->delete("/dorms/{dormId}", [AuthRequired::class], ReviewController::class, 'delete');
-    
+
     $this->router->methods(["GET"], "/wishlist", [AuthRequired::class], WishlistController::class, 'index');
     $this->router->methods(["GET"], "/dorms/{dormId}/add-to-wishlist", [AuthRequired::class], WishlistController::class, 'add');
     $this->router->delete("/wishlist", [AuthRequired::class], WishlistController::class, 'delete');
diff --git a/src/Views/dorm/media.php b/src/Views/dorm/media.php
index 61f5538572fd531bac8918e464b0b254e701043a..d3c73c597cab3a8627394b80d4044dddae1ee6d1 100644
--- a/src/Views/dorm/media.php
+++ b/src/Views/dorm/media.php
@@ -5,28 +5,50 @@
 <div class="container">
   <h1 class="">Media "<?= $dorm->name ?>"</h1>
   <? if (count($medias) > 0) : ?>
-    <section class="slider-wrapper">
-      <button class="slide-arrow slide-arrow-prev">
-        &#8249;
-      </button>
+  <section class="slider-wrapper">
+    <button class="slide-arrow slide-arrow-prev">
+      &#8249;
+    </button>
 
-      <button class="slide-arrow slide-arrow-next">
-        &#8250;
-      </button>
+    <button class="slide-arrow slide-arrow-next">
+      &#8250;
+    </button>
 
 
-      <ul class="slides-container">
-        <? foreach ($medias as $media) : ?>
-          <li class="slide">
-            <? if ($media->type == "video") : ?>
-              <video src="<?= $media->endpoint ?>" alt="<?= $media->alt_text ?>" controls></video>
-            <? else : ?>
-              <img src="<?= $media->endpoint ?>" alt="<?= $media->alt_text ?>">
-            <? endif; ?>
-          </li>
-        <?php endforeach; ?>
-      </ul>
-    </section>
+    <ul class="slides-container">
+      <? foreach ($medias as $media) : ?>
+      <li class="slide">
+        <? if ($media->type == "video") : ?>
+        <video src="<?= $media->endpoint ?>" alt="<?= $media->alt_text ?>" controls></video>
+        <? else : ?>
+        <img src="<?= $media->endpoint ?>" alt="<?= $media->alt_text ?>">
+        <? endif; ?>
+
+        <form method="POST">
+          <button type="button" class="btn btn-danger dialog-btn action-btn delete-btn"
+            data-dialog="delete-<?= $media->media_id ?>"><svg xmlns="http://www.w3.org/2000/svg" fill="none"
+              viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20">
+              <path stroke-linecap="round" stroke-linejoin="round"
+                d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" />
+            </svg>
+          </button>
+          <input type="hidden" name="media_id" value="<?= $media->media_id ?>" />
+          <input type="hidden" name="_method" value="DELETE" />
+          <div class="dialog-wrapper delete-<?= $media->media_id ?>">
+            <div class="dialog-content">
+              <h4 class="confirm-title">Apakah Anda yakin ingin menghapus media ini?</h4>
+              <div class="confirm-action">
+                <button type="button" class="btn btn-outlined dialog-btn"
+                  data-dialog="delete-<?= $media->media_id ?>">Batal</button>
+                <button type="submit" class="btn btn-danger">Hapus</button>
+              </div>
+            </div>
+          </div>
+        </form>
+      </li>
+      <?php endforeach; ?>
+    </ul>
+  </section>
   <? endif; ?>
   <form method="post" enctype="multipart/form-data">
     <input type="file" name="medias[]" multiple accept="image/*, video/*" />
diff --git a/src/public/static/styles/dorm-media.css b/src/public/static/styles/dorm-media.css
index d94b583a0081f54a71d982875be419b0defa6238..79947e030fa3f3d523415a3026dad37f538e5f9d 100644
--- a/src/public/static/styles/dorm-media.css
+++ b/src/public/static/styles/dorm-media.css
@@ -3,3 +3,15 @@
   width: 100%;
   margin: 0 auto;
 }
+
+.slide .delete-btn {
+  position: absolute;
+  top: 0;
+  right: 0;
+  z-index: 1;
+  background: #fff;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  cursor: pointer;
+}