diff --git a/package-lock.json b/package-lock.json
index 56ac4016ead84dafb24c0aa34b93755d50fd66f8..ae5a7c1728995ceeb99c54bb5c79ca54ee7300ac 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,7 +8,7 @@
       "name": "rpl-frontend",
       "version": "0.1.0",
       "dependencies": {
-        "next": "14.0.3",
+        "next": "^14.0.3",
         "react": "^18",
         "react-dom": "^18",
         "react-icons": "^4.12.0",
diff --git a/package.json b/package.json
index 3a4a65a13eb5ed97d10671b530aeeee9e03bc10d..178e9e272fc814111e15548f8f8dfef933427495 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
     "prepare": "npx husky install"
   },
   "dependencies": {
-    "next": "14.0.3",
+    "next": "^14.0.3",
     "react": "^18",
     "react-dom": "^18",
     "react-icons": "^4.12.0",
diff --git a/pages/calonpelanggan/create.jsx b/pages/calonpelanggan/create.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e3b5f4e96b9adb67514b3c013ed94d1299beb655
--- /dev/null
+++ b/pages/calonpelanggan/create.jsx
@@ -0,0 +1,124 @@
+import Template from "@/components/template"
+import { useEffect, useState } from "react"
+import { toast } from "react-toastify"
+import { useRouter } from "next/router"
+const Create = () => {
+  const router = useRouter()
+  const [isDisabled, setIsDisabled] = useState(false)
+  const [nama, setNama] = useState("")
+  const [kelasPelanggan, setKelasPelanggan] = useState("")
+  const [umur, setUmur] = useState("")
+  const [noWA, setNoWA] = useState("")
+  const [alamat, setAlamat] = useState("")
+  const statusPelanggan = "Calon"
+
+  useEffect(() => {
+    if (!router.isReady) return;
+    if (router.query.kelasID) {
+      setKelasPelanggan(router.query.kelasID);
+      setIsDisabled(true);
+    }
+  }, [router.isReady, router.query.kelasID])
+
+  const handleUpdate = async () => {
+    const body = JSON.stringify({
+      nama,
+      kelasPelanggan,
+      umur,
+      noWA,
+      alamat,
+      statusPelanggan
+    })
+    const updateQuery = await fetch("https://rpl-backend-production.up.railway.app/v1/calonpelanggan/create", {
+      method: "POST",
+      headers: {
+        "Content-Type": "application/json"
+      },
+      body
+    }).then(response => response).catch(() => null)
+    if (updateQuery === null) {
+      toast.error("Something went wrong..")
+      return
+    }
+    if (updateQuery.status !== 200) {
+      toast.error("Failed to create...")
+      return
+    }
+    toast.success("Successfully created!")
+    const token = window.localStorage.getItem("token")
+    if (!token) {
+      router.push("/")
+      return
+    }
+    const tokenParsed = token.split(" ")[1]
+    fetch(`https://rpl-backend-production.up.railway.app/v1/auth/verify/${tokenParsed}`).then(async (response) => {
+      const responsejson = await response.json();
+      if (responsejson.data.tipe_user === "ADMIN") {
+        router.push("/calonpelanggan")
+        return
+      }
+      router.push("/")
+    }).catch(error => {
+      console.error(error)
+      return
+    })
+    return;
+  }
+  return <>
+    <Template>
+      <main className="min-h-screen px-14 py-5 bg-[#FFF6F6]">
+        <div className="w-full mb-2">
+          <span className="text-[#F875AA] font-bold text-2xl hover:cursor-pointer" onClick={(e) => {
+            e.preventDefault()
+            router.back()
+          }}>Back</span>
+        </div>
+        <h1 className="text-[#F875AA] font-extrabold text-5xl mb-20 text-center">Form  Pendaftaran  Kursus  Mengemudi  RPL</h1>
+        <div className="text-[#F875AA] font-extrabold text-3xl mb-20 text-center">{router.query.kelasID && (
+          <span> Kelas {router.query.namaKelas}</span>)}
+        </div>
+        <form className="w-2/3 mx-auto space-y-10 flex flex-col align-middle justify-evenly" onSubmit={(e) => {
+          e.preventDefault()
+          handleUpdate()
+          return;
+        }}>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">Nama Siswa</span>
+            <input value={nama} onChange={(e) => {
+              setNama(e.target.value)
+            }} type="text" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">Kelas Pilihan</span>
+            <input value={kelasPelanggan} onChange={(e) => {
+              setKelasPelanggan(e.target.value)
+            }} type="number" required disabled={isDisabled} className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">Umur</span>
+            <input value={umur} onChange={(e) => {
+              setUmur(e.target.value)
+            }} type="number" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">No WhatsApp</span>
+            <input value={noWA} onChange={(e) => {
+              setNoWA(e.target.value)
+            }} type="tel" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">Alamat</span>
+            <input value={alamat} onChange={(e) => {
+              setAlamat(e.target.value)
+            }} type="text" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <input type="submit" className="bg-[#F875AA] px-8 py-3 text-xl font-bold text-white rounded-xl mx-auto hover:cursor-pointer" value={"Simpan"} />
+        </form>
+
+      </main>
+    </Template >
+  </>
+
+}
+
+export default Create
\ No newline at end of file
diff --git a/pages/calonpelanggan/edit/[id].jsx b/pages/calonpelanggan/edit/[id].jsx
new file mode 100644
index 0000000000000000000000000000000000000000..129f6df9ded401ecb1d376829fdf88b83d9c7928
--- /dev/null
+++ b/pages/calonpelanggan/edit/[id].jsx
@@ -0,0 +1,154 @@
+import Template from "@/components/template"
+import { useEffect, useState } from "react"
+import { toast } from "react-toastify"
+import { useRouter } from "next/router"
+const Edit = () => {
+  const router = useRouter()
+  const [ID, setID] = useState()
+  const [nama, setNama] = useState("")
+  const [kelasPelanggan, setKelasPelanggan] = useState("")
+  const [umur, setUmur] = useState("")
+  const [noWA, setNoWA] = useState("")
+  const [alamat, setAlamat] = useState("")
+  const [statusPelanggan, setStatusPelanggan] = useState("")
+  const [adminKursus, setAdminKursus] = useState("")
+
+  const handleUpdate = async () => {
+    const token = window.localStorage.getItem("token")
+    if (token === undefined || token === null) {
+      window.location.replace("/auth/login")
+      return
+    }
+    const body = JSON.stringify({
+      nama,
+      kelasPelanggan,
+      umur,
+      noWA,
+      alamat,
+      statusPelanggan,
+      adminKursus
+    })
+    const updateQuery = await fetch("https://rpl-backend-production.up.railway.app/v1/calonpelanggan/update/" + router.query.id, {
+      method: "PATCH",
+      headers: {
+        Authorization: token,
+        "Content-Type": "application/json"
+      },
+      body
+    }).then(response => response).catch(() => null)
+    if (updateQuery === null) {
+      toast.error("Something went wrong..")
+      return
+    }
+    if (updateQuery.status !== 200) {
+      toast.error("Failed to update...")
+      return
+    }
+    toast.success("Successfully updated!")
+    router.push("/calonpelanggan")
+    return;
+  }
+
+  useEffect(() => {
+    if (!router.isReady) return;
+    const token = window.localStorage.getItem("token")
+    if (token === undefined || token === null) {
+      window.location.replace("/auth/login")
+      return
+    }
+    fetch("https://rpl-backend-production.up.railway.app/v1/calonpelanggan/list/" + router.query.id, {
+      method: "GET",
+      headers: {
+        "Authorization": token
+      }
+    }).then(async response => {
+      if (response.status !== 200) {
+        toast.error("Failed to retrieve items")
+        return
+      }
+      const responsejson = await response.json()
+      setID(responsejson.data.calonPelangganID)
+      setNama(responsejson.data.nama)
+      setKelasPelanggan(responsejson.data.kelasPelanggan)
+      setUmur(responsejson.data.umur)
+      setNoWA(responsejson.data.noWA)
+      setAlamat(responsejson.data.alamat)
+      setStatusPelanggan(responsejson.data.statusPelanggan)
+      setAdminKursus(responsejson.data.adminKursus)
+    })
+    //eslint-disable-next-line
+  }, [router.isReady])
+  return <>
+    <Template>
+      <main className="min-h-screen px-14 py-5 bg-[#FFF6F6]">
+        <div className="w-full mb-2">
+          <span className="text-[#F875AA] font-bold text-2xl hover:cursor-pointer" onClick={(e) => {
+            e.preventDefault()
+            router.replace("/calonpelanggan")
+          }}>Back</span>
+        </div>
+        <h1 className="text-[#F875AA] font-extrabold text-5xl mb-20 text-center">Update  Pelanggan</h1>
+        <form className="w-2/3 mx-auto space-y-10 flex flex-col align-middle justify-evenly" onSubmit={(e) => {
+          e.preventDefault()
+          handleUpdate()
+          return;
+        }}>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">ID Pelanggan</span>
+            <input disabled value={ID} type="number" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">Nama Siswa</span>
+            <input value={nama} onChange={(e) => {
+              setNama(e.target.value)
+            }} type="text" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">ID Kelas Pilihan</span>
+            <input value={kelasPelanggan} onChange={(e) => {
+              setKelasPelanggan(e.target.value)
+            }} type="number" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">Umur</span>
+            <input value={umur} onChange={(e) => {
+              setUmur(e.target.value)
+            }} type="number" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">No WhatsApp</span>
+            <input value={noWA} onChange={(e) => {
+              setNoWA(e.target.value)
+            }} type="tel" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">Alamat</span>
+            <input value={alamat} onChange={(e) => {
+              setAlamat(e.target.value)
+            }} type="text" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">Status Pelanggan</span>
+            <select value={statusPelanggan} onChange={(e) => {
+              setStatusPelanggan(e.target.value)
+            }}>
+              <option value="Calon">Calon</option>
+              <option value="Siswa">Siswa</option>
+              <option value="Lulus">Lulus</option> </select>
+          </div>
+          <div className="flex flex-row align-middle justify-between">
+            <span className="h-min my-auto font-bold text-lg">ID Admin Kursus</span>
+            <input value={adminKursus} onChange={(e) => {
+              setAdminKursus(e.target.value)
+            }} type="number" required className="drop-shadow-xl w-2/3 p-2 rounded-xl" />
+          </div>
+          <input type="submit" className="bg-[#F875AA] px-8 py-3 text-xl font-bold text-white rounded-xl mx-auto hover:cursor-pointer" value={"Simpan"} />
+        </form>
+
+      </main>
+    </Template >
+  </>
+
+}
+
+export default Edit
\ No newline at end of file
diff --git a/pages/calonpelanggan/index.jsx b/pages/calonpelanggan/index.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..baa80bd56b981eedc7ecca5fffc7a98948ff3647
--- /dev/null
+++ b/pages/calonpelanggan/index.jsx
@@ -0,0 +1,170 @@
+import Template from "@/components/template"
+import { useEffect, useState } from "react"
+import { toast } from "react-toastify"
+import { useRouter } from "next/router"
+const Index = () => {
+  const [rows, setRows] = useState([])
+  const router = useRouter()
+  const [deleteToggle, setDeleteToggle] = useState(null)
+  const [currentPage, setCurrentPage] = useState(1);
+  const [isLastPage, setLastPage] = useState(false)
+
+  const getNextPage = async (page) => {
+    const token = window.localStorage.getItem("token")
+    if (token === undefined || token === null) {
+      window.location.replace("/auth/login")
+      return;
+    }
+    const getItems = await fetch("https://rpl-backend-production.up.railway.app/v1/calonpelanggan/list?page=" + (page), {
+      method: "GET",
+      headers: {
+        Authorization: token
+      }
+    }).then(response => response).catch(() => null)
+    if (getItems === null) {
+      toast.error("Something went wrong..")
+      return;
+    }
+    if (getItems.status !== 200) {
+      toast.error("Unable to get more items!")
+      return
+    }
+    const responsejson = await getItems.json();
+    setLastPage(responsejson.data.length < 10)
+    setRows(responsejson.data);
+    return
+  }
+  const handleDelete = async () => {
+    const token = window.localStorage.getItem("token")
+    if (token === undefined || token === null) {
+      window.location.replace("/auth/login")
+      return
+    }
+    const deleteRequest = await fetch("https://rpl-backend-production.up.railway.app/v1/calonpelanggan/delete/" + deleteToggle, {
+      method: "DELETE",
+      headers: {
+        Authorization: token
+      }
+    }).then(response => response).catch(() => null)
+    setDeleteToggle(null)
+    if (deleteRequest === null) {
+      toast.error("Something went wrong...");
+      return;
+    }
+    if (deleteRequest.status !== 200) {
+      toast.error("Failed to delete..");
+      return;
+    }
+    toast.success("Successfully deleted!");
+    router.reload();
+    return;
+  }
+  useEffect(() => {
+    const token = window.localStorage.getItem("token")
+    if (token === undefined || token === null) {
+      window.location.replace("/auth/login")
+      return
+    }
+    fetch("https://rpl-backend-production.up.railway.app/v1/calonpelanggan/list", {
+      method: "GET",
+      headers: {
+        "Authorization": token
+      }
+    }).then(async response => {
+      if (response.status !== 200) {
+        toast.error("Failed to retrieve items")
+        return
+      }
+      const responsejson = await response.json()
+      setRows(responsejson.data)
+    })
+  }, [])
+  return <>
+    <Template>
+      <main className="min-h-screen px-14 py-5 bg-[#FFF6F6]">
+        <div className="w-full mb-2">
+          <span className="text-[#F875AA] font-bold text-2xl hover:cursor-pointer" onClick={(e) => {
+            e.preventDefault()
+            router.replace("/dashboard/admin")
+          }}>Back</span>
+        </div>
+        <div className="flex flex-row align-middle justify-between">
+          <h1 className="text-[#F875AA] font-extrabold text-5xl mb-8">Data  Pelanggan</h1>
+          <button onClick={(e) => {
+            e.preventDefault();
+            router.push("/calonpelanggan/create")
+          }} className="bg-[#F875AA] p-4 text-lg font-bold text-white rounded-3xl">Create</button>
+        </div>
+        <table className="w-full text-center border-spacing-3 border-separate">
+          <thead>
+            <tr>
+              <th className="bg-[#F875AA] p-2 border border-[#F875AA]">ID</th>
+              <th className="bg-[#F875AA] p-2 border border-[#F875AA]">Nama Pelanggan</th>
+              <th className="bg-[#F875AA] p-2 border border-[#F875AA]">Kelas Pelanggan</th>
+              <th className="bg-[#F875AA] p-2 border border-[#F875AA]">Umur</th>
+              <th className="bg-[#F875AA] p-2 border border-[#F875AA]">Nomor WhatsApp</th>
+              <th className="bg-[#F875AA] p-2 border border-[#F875AA]">Alamat</th>
+              <th className="bg-[#F875AA] p-2 border border-[#F875AA]">Status Pelanggan</th>
+              <th className="bg-[#F875AA] p-2 border border-[#F875AA]">Admin Kursus</th>
+              <th className=""></th>
+            </tr>
+          </thead>
+          <tbody>
+            {rows.map((row, index) => {
+              return <tr key={row.calonPelangganID}>
+                <td className="p-6 border border-[#F875AA] bg-white">{row.calonPelangganID}</td>
+                <td className="p-6 border border-[#F875AA] bg-white">{row.nama}</td>
+                <td className="p-6 border border-[#F875AA] bg-white">{row.kelasPelanggan}</td>
+                <td className="p-6 border border-[#F875AA] bg-white">{row.umur}</td>
+                <td className="p-6 border border-[#F875AA] bg-white">{row.noWA}</td>
+                <td className="p-6 border border-[#F875AA] bg-white">{row.alamat}</td>
+                <td className="p-6 border border-[#F875AA] bg-white">{row.statusPelanggan}</td>
+                <td className="p-6 border border-[#F875AA] bg-white">{row.adminKursus}</td>
+                <td className="px-2 flex flex-col align-middle justify-evenly space-y-2 ">
+                  <button className="bg-[#AEDEFC] p-1 rounded-lg" onClick={(e) => {
+                    e.preventDefault();
+                    router.push("/calonpelanggan/edit/" + row.calonPelangganID)
+                    return;
+                  }}>Update</button>
+                  <button data-modal-target="popup-modal" data-modal-toggle="popup-modal" className="bg-[#FFDFDF] p-1 rounded-lg" onClick={(e) => {
+                    e.preventDefault()
+                    setDeleteToggle(row.calonPelangganID)
+                  }}>Delete</button>
+                </td>
+              </tr>
+            })}
+          </tbody>
+        </table>
+        <div className="flex flex-row align-middle justify-around">
+          <button className="bg-red-400 p-5 rounded-2xl text-white font-bold" disabled={currentPage === 1} onClick={() => {
+            getNextPage(currentPage - 1)
+            setCurrentPage(page => page - 1)
+          }}>Prev</button>
+          <span className="h-min my-auto font-bold">Page {currentPage}</span>
+          <button className="bg-blue-400 p-5 rounded-2xl text-white font-bold" disabled={isLastPage} onClick={() => {
+            getNextPage(currentPage + 1)
+            setCurrentPage(page => page + 1)
+          }}>Next</button>
+        </div>
+      </main>
+      {deleteToggle !== null && <div className="left-0 top-0 fixed w-screen h-screen bg-white bg-opacity-80 p-20 flex flex-col align-middle justify-center">
+        <div className="w-1/2 mx-auto space-y-5">
+          <h1 className="text-center p-10 bg-[#FFDFDF] border-2 border-[#F875AA] rounded-xl font-bold text-xl">Apakah anda yakin akan menghapus data pelanggan?</h1>
+          <div className="space-x-5 flex flex-row align-middle justify">
+            <button className="p-3 rounded-xl w-full bg-[#FFDFDF] border-2 border-[#F875AA]" onClick={(e) => {
+              e.preventDefault();
+              handleDelete()
+            }}>Delete</button>
+            <button className="p-3 rounded-xl w-full bg-[#FFDFDF] border-2 border-[#F875AA]" onClick={(e) => {
+              e.preventDefault()
+              setDeleteToggle(null)
+            }}>Cancel</button>
+          </div>
+        </div>
+      </div>}
+    </Template >
+  </>
+
+}
+
+export default Index
\ No newline at end of file
diff --git a/pages/dashboard/admin.jsx b/pages/dashboard/admin.jsx
index 9382f880a9bd4a924085cb9992463e3509730fe4..839c194509e6470459279ec2707b2a5131ebf6d1 100644
--- a/pages/dashboard/admin.jsx
+++ b/pages/dashboard/admin.jsx
@@ -1,58 +1,53 @@
 import Template from "@/components/templatenofooter"
 import { toast } from "react-toastify"
-import { useEffect, useState} from "react"
+import { useEffect, useState } from "react"
 import { useRouter } from "next/router"
-
-const DashboardOwner = () => {
-    const router = useRouter();
-    const [username, setUsername] = useState(null)
-
-    useEffect(() => {
-      const token = window.localStorage.getItem("token")
-      if (!token){
+import Image from "next/image"
+
+const DashboardAdmin = () => {
+  const router = useRouter();
+  const [username, setUsername] = useState(null)
+
+  useEffect(() => {
+    const token = window.localStorage.getItem("token")
+    if (!token) {
+      window.location.replace("/auth/login")
+    }
+    const tokenParsed = token.split(" ")[1]
+    fetch(`https://rpl-backend-production.up.railway.app/v1/auth/verify/${tokenParsed}`).then(async (response) => {
+      if (response.status !== 200) {
+        toast.error("Failed to retrieve items")
+        return;
+      }
+      const responsejson = await response.json();
+      if (responsejson.data.tipe_user !== "ADMIN") {
         window.location.replace("/auth/login")
+        return
       }
-      const tokenParsed = token.split(" ")[1]
-      fetch(`https://rpl-backend-production.up.railway.app/v1/auth/verify/${tokenParsed}`).then(async (response) => {
-        if (response.status !== 200){
-          toast.error("Failed to retrieve items")
-          return;
-        }
-        const responsejson = await response.json();
-        if (responsejson.data.tipe_user !== "ADMIN"){
-          window.location.replace("/auth/login")
-          return
-        }
-        setUsername(responsejson.data.username)
+      setUsername(responsejson.data.username)
 
-      })
-    }, [])
+    }).catch(error => {
+      console.error(error)
+      return
+    })
+  }, [])
 
   return (
     <Template>
-
-    <main className="min-h-screen px-14 py-10 bg-[#FFF6F6]">
-  
-    <div className="text-[#F875AA] font-extrabold text-5xl mb-20 text-center">Selamat datang kembali, {username}!</div>
-    <div className = "flex flex-row align-middle justify-between">
-      {/* <div className="bg-white p-6 rounded-lg shadow-md" /> */}
-
-    </div>
-    <div className="w-[226px] h-[95px] left-[638px] top-[381px] absolute text-center text-pink-400 text-[32px] font-extrabold font-'Poppins'">Data<br/>Pelanggan</div>
-    <div className="w-[126px] h-[53px] left-[694px] top-[715px] absolute">
-        <div className="w-[126px] h-[53px] left-0 top-0 absolute bg-sky-200 rounded-[15px]" />
-          <span className="w-[84.28px] h-[28.33px] left-[21px] top-[15px] absolute text-center text-black text-base font-bold font-'Poppins'" onClick={(e) => {
-                  e.preventDefault()
-                  router.push("/")
-                  }}>Ubah</span>  
-    </div>
-    <img className="w-[171px] h-[171px] left-[670px] top-[497px] absolute" src="/client.png" />
-        </main>
+      <main className="min-h-screen p-28 flex flex-col align-middle justify-center bg-[#FFF6F6] space-y-20">
+        <h1 className="text-5xl text-center font-extrabold text-[#F875AA]">Selamat datang kembali, {username}</h1>
+            <div className="bg-white rounded-xl p-10 space-y-14 flex flex-col align-middle justify-evenly shadow-xl shadow-[#FFDFE0] w-1/3 mx-auto">
+              <span className="text-center font-bold text-4xl text-[#F875AA]">Data <br></br>Pelanggan</span>
+              <Image className="mx-auto" src="/client.png" width={126} height={53} alt="Data Kelas" />
+              <button onClick={(e) => {
+                e.preventDefault();
+                router.push("/calonpelanggan")
+                return;
+              }} className="bg-sky-200 rounded-xl font-bold text-center w-min mx-auto px-10 py-3">Ubah</button>
+            </div>
+      </main>
     </Template>
-
-
   )
-
 }
 
-export default DashboardOwner
\ No newline at end of file
+export default DashboardAdmin
\ No newline at end of file
diff --git a/pages/index.jsx b/pages/index.jsx
index 2c417a29137754ed3062a6067e32cc62870ac357..09fe3ba02464a61d64648f928d96928c1f3c24e6 100644
--- a/pages/index.jsx
+++ b/pages/index.jsx
@@ -1,12 +1,100 @@
 import Template from "@/components/template"
+import { useEffect, useState } from "react"
+import { toast } from "react-toastify"
+import { useRouter } from "next/router"
 
-export default function Home() {
-  return (
+export default function Home({ kelasMengemudi, propertyWebsite }) {
+  const router = useRouter();
+
+  return <>
     <Template>
-      <main className="min-h-screen align-middle justify-center flex flex-col">
-        <h1 className="text-center font-bold text-4xl">Rungkad.. entek entek an.. <br />  kelangan koe sing paling tak sayang..</h1>
+      <main className="min-h-screen px-14 py-5 bg-[#FFF6F6]">
+        <h1 className="text-[#F875AA] font-extrabold text-4xl mt-5 mb-10 text-center">Sistem  Manajemen  Kursus  Mengemudi  RPL</h1>
+
+        <p className="mx-auto w-11/12 justify-center text-center">{propertyWebsite.description}</p>
+
+        <div className="flex flex-col justify-center items-center space-y-5">
+          <span className="text-[#F875AA] font-extrabold text-3xl text-center mt-20">Paket Kelas</span>
+          <span className="text-[#16A4FF]">*) Setiap 1 sesi kelas berlangsung selama 2 jam</span>
+        </div>
+
+        <div className={`max-h-fit px-28 mt-10 mx-auto max-w-[1270px] relative grid grid-cols-3 gap-x-8 gap-y-8`}>
+          {kelasMengemudi.map((row, index) => {
+            return (
+            <div key={row.kelasMengemudiID}
+            className={`relative col-span-1 row-span-1 col-start-${(index % 3) + 1} row-start-${Math.floor(index / 3) + 1}`}>
+              <div className="w-[320px] h-[360px] bg-white rounded-[15px] shadow-xl shadow-[#FFDFE0] relative flex flex-col justify-center items-center">
+                <span className="text-[#F875AA] text-xl font-extrabold">{row.namaKelas}</span>
+                <span className="text-center text-black text-base mt-8">Harga: Rp{row.hargaKelas}</span>
+                <span className="text-center text-black text-base mt-3">Total Jam Kursus: {2*row.jumlahSesi}</span>
+                <span className="text-center text-black text-base mt-3">Jumlah Sesi: {row.jumlahSesi}</span>
+                <span className="text-center text-black text-base mt-3">Nama Kendaraan: {row.namaKendaraan}</span>
+                <span className="text-center text-black text-base mt-3">Jenis Kendaraan: {row.jenisKendaraan}</span>
+                
+                <button onClick={(e) => {
+                  e.preventDefault();
+                  router.push({
+                    pathname: "/calonpelanggan/create",
+                    query: {kelasID: row.kelasMengemudiID, namaKelas: row.namaKelas},
+                  })
+                }} className="bg-[#AFDEFC] w-[126px] h-[53px] p-3 text-lg font-bold text-black rounded-2xl mt-8">Daftar</button>
+              </div>
+            </div>);
+          })}
+        </div>
+
+        <div className="flex justify-center items-center">
+          <span className="text-[#F875AA] font-extrabold text-3xl text-center mt-20">Frequently Asked Questions</span>
+        </div>
+
+        <div className="mt-10 mb-20 mx-auto relative space-y-10">
+          <div>
+            {propertyWebsite.faq.map((item, index) => (
+              <div key={index} className="faq-item">
+                <div className="mx-auto w-11/12 h-auto bg-white rounded-[15px] shadow-xl shadow-[#FFDFE0] relative flex flex-col justify-center mb-5">
+                  <span className="question text-[#F875AA] text-xl font-bold text-left m-5">{item.question}</span>
+                  <span className="answer ml-5 mb-5 mr-5">{item.answer}</span>
+                </div>
+              </div>
+            ))}
+          </div>
+        </div>
 
       </main>
     </Template>
-  )
+  </>
+}
+
+export const getServerSideProps = async () => {
+  const kelasMengemudiQuery = await fetch("https://rpl-backend-production.up.railway.app/v1/kelasmengemudi/list", {
+    method: "GET",
+  }).catch(err => {
+    return null
+  })
+  const propertyQuery = await fetch("https://rpl-backend-production.up.railway.app/v1/property", {
+    method: "GET",
+  }).catch(error => {
+    return null
+  })
+  let kelasMengemudi;
+  if (kelasMengemudiQuery === null) kelasMengemudi = []
+  else {
+    const kelasMengemudiJson = await kelasMengemudiQuery.json()
+    kelasMengemudi = kelasMengemudiJson.data
+  }
+  let propertyWebsite;
+  if (propertyQuery === null) propertyWebsite = {
+    description: "",
+    faq: []
+  }
+  else {
+    const propertyJson = await propertyQuery.json();
+    propertyWebsite = propertyJson.data
+  }
+  return {
+    props: {
+      kelasMengemudi,
+      propertyWebsite
+    }
+  }
 }