diff --git a/apps/next/src/components/layout/header/controls/AvatarDropdown.tsx b/apps/next/src/components/layout/header/controls/AvatarDropdown.tsx
new file mode 100644
index 0000000..3aaf7ab
--- /dev/null
+++ b/apps/next/src/components/layout/header/controls/AvatarDropdown.tsx
@@ -0,0 +1,75 @@
+'use client';
+import Link from 'next/link';
+import { useRouter } from 'next/navigation';
+import {
+ BasedAvatar,
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuLabel,
+ DropdownMenuSeparator,
+ DropdownMenuTrigger,
+} from '@gib/ui';
+import { useConvexAuth, useQuery } from 'convex/react';
+import { useAuthActions } from '@convex-dev/auth/react';
+import { api } from '@gib/backend/convex/_generated/api.js';
+
+export const AvatarDropdown = () => {
+ const router = useRouter();
+ const { isLoading, isAuthenticated } = useConvexAuth();
+ const { signOut } = useAuthActions();
+ const user = useQuery(api.auth.getUser, {});
+ const currentImageUrl = useQuery(
+ api.files.getImageUrl,
+ user?.image ? { storageId: user.image } : 'skip',
+ );
+
+ if (isLoading)
+ return ;
+ if (!isAuthenticated) return
;
+
+ return (
+
+
+
+
+
+ {(user?.name ?? user?.email) && (
+ <>
+
+ {user.name?.trim() ?? user.email?.trim()}
+
+
+ >
+ )}
+
+
+ Edit Profile
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/apps/next/src/components/layout/header/controls/index.tsx b/apps/next/src/components/layout/header/controls/index.tsx
new file mode 100644
index 0000000..be08a22
--- /dev/null
+++ b/apps/next/src/components/layout/header/controls/index.tsx
@@ -0,0 +1,21 @@
+'use client';
+import type { ThemeToggleProps } from '@gib/ui';
+import { ThemeToggle } from '@gib/ui';
+import { AvatarDropdown } from './AvatarDropdown';
+
+export const Controls = (themeToggleProps?: ThemeToggleProps) => {
+ return (
+
+ );
+};
diff --git a/apps/next/src/components/layout/header/index.tsx b/apps/next/src/components/layout/header/index.tsx
index 0c69ad6..c020afc 100644
--- a/apps/next/src/components/layout/header/index.tsx
+++ b/apps/next/src/components/layout/header/index.tsx
@@ -2,9 +2,8 @@
import Image from 'next/image';
import Link from 'next/link';
-import { cn } from '@gib/ui';
import type { ComponentProps } from 'react';
-//import { Controls } from './controls';
+import { Controls } from './controls';
export default function Header(headerProps: ComponentProps<'header'>) {
return (
@@ -40,7 +39,7 @@ export default function Header(headerProps: ComponentProps<'header'>) {
-
+
diff --git a/apps/next/src/middleware.ts b/apps/next/src/middleware.ts
index cef1b72..773aa68 100644
--- a/apps/next/src/middleware.ts
+++ b/apps/next/src/middleware.ts
@@ -29,6 +29,6 @@ export const config = {
'/((?!_next/static|_next/image|favicon.ico|monitoring-tunnel|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)',
'/((?!.*\\..*|_next).*)',
'/',
- '/(api|trpc)(.*)',
+ '/(api)(.*)',
],
};