diff --git a/apps/web/src/components/navbar/NavAuth.tsx b/apps/web/src/components/navbar/NavAuth.tsx
new file mode 100644
index 0000000..22b8479
--- /dev/null
+++ b/apps/web/src/components/navbar/NavAuth.tsx
@@ -0,0 +1,40 @@
+import { Link, useNavigate } from "@tanstack/react-router";
+import { useSession, signOut } from "../../lib/auth-client";
+
+const NavAuth = () => {
+ const { data: session } = useSession();
+ const navigate = useNavigate();
+
+ const handleSignOut = () => {
+ void signOut()
+ .then(() => void navigate({ to: "/" }))
+ .catch((err) => console.error("Sign out error:", err));
+ };
+
+ return (
+
+ {session ? (
+
+ ) : (
+
+ Sign in
+
+ )}
+
+ );
+};
+
+export default NavAuth;
diff --git a/apps/web/src/components/navbar/NavBar.tsx b/apps/web/src/components/navbar/NavBar.tsx
new file mode 100644
index 0000000..b5bb494
--- /dev/null
+++ b/apps/web/src/components/navbar/NavBar.tsx
@@ -0,0 +1,18 @@
+import NavAuth from "./NavAuth";
+import NavLinks from "./NavLinks";
+
+const Navbar = () => {
+ return (
+
+ );
+};
+
+export default Navbar;
diff --git a/apps/web/src/components/navbar/NavLink.tsx b/apps/web/src/components/navbar/NavLink.tsx
new file mode 100644
index 0000000..c0dae7b
--- /dev/null
+++ b/apps/web/src/components/navbar/NavLink.tsx
@@ -0,0 +1,26 @@
+import { Link } from "@tanstack/react-router";
+
+type NavLinkProps = { to: string; children: React.ReactNode };
+
+const NavLink = ({ to, children }: NavLinkProps) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export default NavLink;
diff --git a/apps/web/src/components/navbar/NavLinks.tsx b/apps/web/src/components/navbar/NavLinks.tsx
new file mode 100644
index 0000000..5040c83
--- /dev/null
+++ b/apps/web/src/components/navbar/NavLinks.tsx
@@ -0,0 +1,21 @@
+import NavLink from "./NavLink";
+
+const links = [
+ { to: "/", label: "Home" },
+ { to: "/play", label: "Play" },
+ { to: "/multiplayer", label: "Multiplayer" },
+];
+
+const NavLinks = () => {
+ return (
+
+ );
+};
+
+export default NavLinks;
diff --git a/apps/web/src/components/navbar/NavLogin.tsx b/apps/web/src/components/navbar/NavLogin.tsx
new file mode 100644
index 0000000..2bbf39e
--- /dev/null
+++ b/apps/web/src/components/navbar/NavLogin.tsx
@@ -0,0 +1,17 @@
+import { Link } from "@tanstack/react-router";
+
+const NavLogin = () => {
+ return (
+
+ Sign in
+
+ );
+};
+
+export default NavLogin;
diff --git a/apps/web/src/components/navbar/NavLogout.tsx b/apps/web/src/components/navbar/NavLogout.tsx
new file mode 100644
index 0000000..ec297cf
--- /dev/null
+++ b/apps/web/src/components/navbar/NavLogout.tsx
@@ -0,0 +1,26 @@
+import { useNavigate } from "@tanstack/react-router";
+import { signOut } from "../../lib/auth-client";
+
+type NavLogoutProps = { name: string };
+
+const NavLogout = ({ name }: NavLogoutProps) => {
+ const navigate = useNavigate();
+
+ const handleLogout = () => {
+ void signOut()
+ .then(() => void navigate({ to: "/" }))
+ .catch((err) => console.error("logout error:", err));
+ };
+
+ return (
+
+ );
+};
+
+export default NavLogout;
diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx
index 0add685..1dc4378 100644
--- a/apps/web/src/routes/__root.tsx
+++ b/apps/web/src/routes/__root.tsx
@@ -1,56 +1,14 @@
-import {
- createRootRoute,
- Link,
- Outlet,
- useNavigate,
-} from "@tanstack/react-router";
+import { createRootRoute, Outlet } from "@tanstack/react-router";
import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";
-import { useSession, signOut } from "../lib/auth-client";
+import Navbar from "../components/navbar/NavBar";
const RootLayout = () => {
- const { data: session } = useSession();
- const navigate = useNavigate();
-
return (
<>
-
-
- Home
-
-
- Play
-
-
- Multiplayer
-
-
- {session ? (
-
- ) : (
-
- Sign in
-
- )}
-
-
-
-
+
+
+
+
>
);