diff --git a/app/routes.ts b/app/routes.ts
index 102b402..981eb01 100644
--- a/app/routes.ts
+++ b/app/routes.ts
@@ -1,3 +1,15 @@
-import { type RouteConfig, index } from "@react-router/dev/routes";
+import { type RouteConfig, index, route } from "@react-router/dev/routes";
-export default [index("routes/home.tsx")] satisfies RouteConfig;
+export default [
+ index("routes/home.tsx"),
+ route("/about", "./routes/about.tsx"),
+ route("/kontak", "./routes/kontak.tsx"),
+ route("/register", "./routes/register.tsx"),
+ route("/portofolio","./routes/portofolio.tsx"),
+ route("/login","./routes/login.tsx"),
+ route("/dashboard","./routes/dashboard.tsx"),
+
+
+
+
+] satisfies RouteConfig;
diff --git a/app/routes/about.tsx b/app/routes/about.tsx
new file mode 100644
index 0000000..1a16bd1
--- /dev/null
+++ b/app/routes/about.tsx
@@ -0,0 +1,69 @@
+export default function About() {
+ return (
+ <>
+
+
+
+
ABOUT
+
tentang sayaa
+
+
+ saya zahro,saya bisa di panggil zar
+ saya memiliki hobi menggambar,dan menyanyi
+ saya berusia 17 tahun
+ saya sekolah di SMK GUNA CIPTA
+ saya mengambil jurusan (RPL) atau Rekayasa Perangkat Lunak
+
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/app/routes/dashboard.tsx b/app/routes/dashboard.tsx
new file mode 100644
index 0000000..c04b722
--- /dev/null
+++ b/app/routes/dashboard.tsx
@@ -0,0 +1,55 @@
+import { useNavigate } from "react-router";
+import { useState } from "react";
+
+export default function Dashboard() {
+ const navigate = useNavigate();
+ const [menu, setMenu] = useState("dashboard");
+
+ const menus = ["dashboard", "profile", "settings", "about"];
+
+ return (
+
+
+ {/* SIDEBAR */}
+
+
+
MyApp
+
+ {menus.map((item) => (
+
setMenu(item)}
+ className={`p-2 mb-2 rounded cursor-pointer capitalize ${
+ menu === item ? "bg-purple-600" : "hover:bg-gray-700"
+ }`}
+ >
+ {item}
+
+ ))}
+
+
+
navigate("/login")}
+ className="bg-red-500 py-1 rounded"
+ >
+ Logout
+
+
+
+ {/* CONTENT */}
+
+
+
+
+ {menu}
+
+
+
+ Selamat datang di halaman {menu} 👋
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/app/routes/kontak.tsx b/app/routes/kontak.tsx
new file mode 100644
index 0000000..a72285e
--- /dev/null
+++ b/app/routes/kontak.tsx
@@ -0,0 +1,54 @@
+export default function Kontak() {
+ return(
+ <>
+
+
+
+
kontak saya
+
no saya = 0895707255300
+
email saya = zahrotusyita@gmail.com
+
alamat = Babakannanjung
+
+ >
+ )
+}
\ No newline at end of file
diff --git a/app/routes/login.tsx b/app/routes/login.tsx
new file mode 100644
index 0000000..94ffc8b
--- /dev/null
+++ b/app/routes/login.tsx
@@ -0,0 +1,88 @@
+import { useState } from "react";
+import { useNavigate } from "react-router";
+
+export default function Login() {
+ const [email, setEmail] = useState("");
+ const [password, setPassword] = useState("");
+ const navigate = useNavigate();
+
+ const handleLogin = async (e: any) => {
+ e.preventDefault();
+
+ try {
+ const res = await fetch("http://localhost:3000/login", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ username: email,
+ password: password
+ })
+ });
+
+ const data = await res.json();
+
+ if (data.success) {
+ localStorage.setItem("token", data.token);
+ navigate("/dashboard");
+ } else {
+ alert(data.message);
+ }
+ } catch (error) {
+ alert("Server error");
+ }
+ };
+
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/app/routes/portofolio.tsx b/app/routes/portofolio.tsx
new file mode 100644
index 0000000..7d2fe77
--- /dev/null
+++ b/app/routes/portofolio.tsx
@@ -0,0 +1,48 @@
+export default function portofolio() {
+ return(
+
+
+
+
+
+ portofolio
+
+
+
+ saya adalah pribadi yang ingin belajar dan berkembang
+
+
+
+ saya senang mencoba hal-hal baru
+
+
+
+ memiliki tanggung jawab yang tinggi
+
+
+
+ bagi saya,setiap pengalaman adalah kesempatan untuk terus menjadi versi yang lebih baik
+
+
+
+ ini hasil saya
+
+
+
+ kontak yang bisa kalian hubungi
+
+
+
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/app/routes/register.tsx b/app/routes/register.tsx
new file mode 100644
index 0000000..760ea16
--- /dev/null
+++ b/app/routes/register.tsx
@@ -0,0 +1,63 @@
+export default function Register() {
+ return (
+
+
+
+
+
+ REGISTER
+
+
+
+ ISI DATA ANDA
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 76775b9..6473e36 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"isbot": "^5.1.36",
"react": "^19.2.4",
"react-dom": "^19.2.4",
- "react-router": "7.14.0"
+ "react-router": "^7.14.0"
},
"devDependencies": {
"@react-router/dev": "7.14.0",
diff --git a/package.json b/package.json
index 2209228..6bcc673 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,7 @@
"isbot": "^5.1.36",
"react": "^19.2.4",
"react-dom": "^19.2.4",
- "react-router": "7.14.0"
+ "react-router": "^7.14.0"
},
"devDependencies": {
"@react-router/dev": "7.14.0",
@@ -26,4 +26,4 @@
"typescript": "^5.9.3",
"vite": "^8.0.3"
}
-}
\ No newline at end of file
+}