diff --git a/src/App.vue b/src/App.vue
index d418bd7..7c2aa3f 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,3 +1,3 @@
- Asia Golf
+
diff --git a/src/features/auth/components/LoginCard.vue b/src/features/auth/components/LoginCard.vue
new file mode 100644
index 0000000..87a9fdb
--- /dev/null
+++ b/src/features/auth/components/LoginCard.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
![Asia Golf asia-golf]()
+
+
+
+
diff --git a/src/features/auth/components/LoginForm.vue b/src/features/auth/components/LoginForm.vue
new file mode 100644
index 0000000..1861efd
--- /dev/null
+++ b/src/features/auth/components/LoginForm.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Login
+
+
+
diff --git a/src/features/auth/components/partials/feedbacks/LoginFailed.vue b/src/features/auth/components/partials/feedbacks/LoginFailed.vue
new file mode 100644
index 0000000..0bb6537
--- /dev/null
+++ b/src/features/auth/components/partials/feedbacks/LoginFailed.vue
@@ -0,0 +1,11 @@
+
+
+
diff --git a/src/features/auth/components/partials/feedbacks/LoginSuccess.vue b/src/features/auth/components/partials/feedbacks/LoginSuccess.vue
new file mode 100644
index 0000000..8b85a1e
--- /dev/null
+++ b/src/features/auth/components/partials/feedbacks/LoginSuccess.vue
@@ -0,0 +1,11 @@
+
+
+
diff --git a/src/features/auth/composables/useCurrentUser.ts b/src/features/auth/composables/useCurrentUser.ts
new file mode 100644
index 0000000..20001cf
--- /dev/null
+++ b/src/features/auth/composables/useCurrentUser.ts
@@ -0,0 +1,7 @@
+import { useAuth } from "@/features/auth/stores/useAuth";
+
+export function useCurrentUser() {
+ const { auth } = useAuth();
+
+ return { user: auth.auth?.user };
+}
diff --git a/src/features/auth/pages/LoginPage.vue b/src/features/auth/pages/LoginPage.vue
new file mode 100644
index 0000000..7e9f2a4
--- /dev/null
+++ b/src/features/auth/pages/LoginPage.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/main.ts b/src/main.ts
index c0df87d..adbb4ff 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -10,6 +10,7 @@ import * as components from "vuetify/components";
import * as directives from "vuetify/directives";
import App from "@/App.vue";
+import { router } from "@/router";
import "@mdi/font/css/materialdesignicons.css";
import "@fontsource/poppins";
@@ -33,5 +34,6 @@ const app = createApp(App);
app.use(vuetify);
app.use(pinia);
+app.use(router);
app.use(VueQueryPlugin);
app.mount("#app");
diff --git a/src/pages/DashboardPage.vue b/src/pages/DashboardPage.vue
new file mode 100644
index 0000000..d1479fd
--- /dev/null
+++ b/src/pages/DashboardPage.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
![Asia Golf asia-golf]()
+
+
+
+
+
+
+ Logout
+
+
+
diff --git a/src/router.ts b/src/router.ts
new file mode 100644
index 0000000..69abedf
--- /dev/null
+++ b/src/router.ts
@@ -0,0 +1,29 @@
+import { createRouter, createWebHistory } from "vue-router";
+import { useAuth } from "@/features/auth/stores/useAuth";
+
+import LoginPage from "@/features/auth/pages/LoginPage.vue";
+import DashboardPage from "@/pages/DashboardPage.vue";
+
+const routes = [
+ { path: "/", component: DashboardPage },
+ { path: "/login", component: LoginPage },
+];
+
+export const router = createRouter({
+ history: createWebHistory(),
+ routes,
+});
+
+router.beforeEach((to, _, next) => {
+ const { isAuthenticated } = useAuth();
+
+ if (to.path === "/login" && isAuthenticated) {
+ next({ path: "/" });
+ return;
+ }
+
+ if (to.path !== "/login" && !isAuthenticated) {
+ next({ path: "/login" });
+ return;
+ } else next();
+});