diff --git a/penghitungBMI/src/main/java/apap/tutorial/penghitungBMI/controller/PenghitungBmiController.java b/penghitungBMI/src/main/java/apap/tutorial/penghitungBMI/controller/PenghitungBmiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..be7ee55c8b445d65db8b978b6aa4dffbb1f019e3
--- /dev/null
+++ b/penghitungBMI/src/main/java/apap/tutorial/penghitungBMI/controller/PenghitungBmiController.java
@@ -0,0 +1,34 @@
+package apap.tutorial.penghitungBMI.controller;
+
+import apap.tutorial.penghitungBMI.model.PenghitungBmi;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.GetMapping;
+
+
+@Controller
+public class PenghitungBmiController {
+    private String getPenghitungBmiPage(String beratBadan, String tinggiBadan, Model model){
+        if (beratBadan.isEmpty() || tinggiBadan.isEmpty() || beratBadan.equals("0") || tinggiBadan.equals("0")){
+            model.addAttribute("msg", "Isi berat dan tinggi badan anda dengan benar");
+        }
+        else {
+            final PenghitungBmi penghitungBmi = new PenghitungBmi(beratBadan,tinggiBadan);
+            model.addAttribute("penghitungBmi", penghitungBmi);
+        }
+        return "penghitungBmiPage.html";
+    }
+
+    @GetMapping(value="/penghitung-BMI")
+    public  String penghitungBmiRequestParam(@RequestParam(value = "berat") String beratBadan, @RequestParam(value = "tinggi") String tinggiBadan, Model model){
+        return getPenghitungBmiPage(beratBadan, tinggiBadan, model);
+    }
+
+    @GetMapping(value="/penghitung-BMI/{berat}/{tinggi}")
+    public  String penghitungBmiWithPathVariable(@PathVariable(value = "berat") String beratBadan, @PathVariable(value = "tinggi") String tinggiBadan, Model model){
+        return getPenghitungBmiPage(beratBadan, tinggiBadan, model);
+    }
+}
diff --git a/penghitungBMI/src/main/java/apap/tutorial/penghitungBMI/model/PenghitungBmi.java b/penghitungBMI/src/main/java/apap/tutorial/penghitungBMI/model/PenghitungBmi.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee8078e7179af79e1a5421de3fad4741c8ae46aa
--- /dev/null
+++ b/penghitungBMI/src/main/java/apap/tutorial/penghitungBMI/model/PenghitungBmi.java
@@ -0,0 +1,34 @@
+package apap.tutorial.penghitungBMI.model;
+import java.io.Serializable;
+
+public class PenghitungBmi implements Serializable{
+    private Double beratBadan;
+    private Double tinggiBadan;
+    private String kategori;
+
+    public PenghitungBmi(String beratBadan, String tinggiBadan){
+        this.beratBadan = Double.parseDouble((beratBadan));
+        this.tinggiBadan= Double.parseDouble((tinggiBadan))/100;
+    }
+
+    public String hitungBmi(){
+        double hasilBmi = beratBadan /(Math.pow(tinggiBadan,2));
+        if (hasilBmi < 18.5 ){
+            this.kategori = "Berat badan anda kurang";
+        }
+        else if (hasilBmi >= 18.5 && hasilBmi <= 22.9){
+            this.kategori = "Berat badan anda normal";
+        }
+        else if (hasilBmi > 22.9 && hasilBmi <= 29.9){
+            this.kategori = "Berat badan anda berlebih (kecenderungan obesitas)";
+        }
+        else {
+            this.kategori = "Anda obesitas";
+        }
+        return String.format("%.2f", hasilBmi);
+    }
+
+    public double getWeight() {return beratBadan;}
+    public double getHeight() {return tinggiBadan;}
+    public String getKategori() {return kategori;}
+}
diff --git a/penghitungBMI/src/main/resources/templates/penghitungBmiPage.html b/penghitungBMI/src/main/resources/templates/penghitungBmiPage.html
new file mode 100644
index 0000000000000000000000000000000000000000..43d2f05afada7d1d38b791985721517d02ee2a54
--- /dev/null
+++ b/penghitungBMI/src/main/resources/templates/penghitungBmiPage.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<!-- attribute xmlns:th harus ada jika ingin menggunakan
+template engine milik Thymeleaf -->
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8">
+    <title>Penghitung BMI</title>
+    <style>
+        .card {
+            width: 40%;
+            display: flex;
+            flex-direction: column;
+            font-family: Arial, Helvetica, sans-serif;
+            border-radius: 10px;
+            box-shadow: 0 0 50px #ccc;
+            position: absolute;
+            top: 50%;
+            left: 50%;
+            transform: translate(-50%, -50%);
+        }
+        .header {
+            height: 30%;
+            background: #023047;
+            border-top-left-radius: 10px;
+            border-top-right-radius: 10px;
+            color: white;
+            text-align: center;
+        }
+        .container {
+            padding: 2px 16px;
+        }
+        .kategori{
+            text-align: center;
+            color: #fb8500;
+            padding: 10px 0px;
+            font-size:18px;
+            font-weight: bold;
+        }
+    </style>
+</head>
+<body>
+<div>
+    <div class="card">
+        <div class="header">
+            <p>Penghitung BMI</p>
+        </div>
+
+        <div class="container">
+            <th:block th:if="${penghitungBmi != null}">
+            <p>
+                Berat badan:
+                <span th:text="${penghitungBmi.getWeight()} + ' kg'"></span>
+            </p>
+                <p>
+                Tinggi badan:
+                <span th:text="${penghitungBmi.getHeight()}+ ' m'"></span>
+            </p>
+            <p>
+            <strong>
+                Hasil BMI:
+                <span th:text="${penghitungBmi.hitungBmi()}"></span>
+            </strong>
+            </p>
+                <p class="kategori">
+                <span th:text="${penghitungBmi.getKategori()}"></span>
+                </p>
+            </th:block>
+
+            <div th:unless="${penghitungBmi != null}">
+                <h3 class="kategori" th:text="${msg}"></h3>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
+</html>
\ No newline at end of file