diff --git a/app/(content)/(gaming)/games/page.tsx b/app/(content)/(gaming)/games/page.tsx
index 7fe2629f5a8b3c8dfd695ae9fc9906ff776ee1bf..9985f67bb1c90f447ae53c88d350384e97c64ccf 100644
--- a/app/(content)/(gaming)/games/page.tsx
+++ b/app/(content)/(gaming)/games/page.tsx
@@ -1,4 +1,5 @@
 import Sort from "@/components/filter-sort-games"
+import { PopoverSort } from "@/components/filter-sort-games-mobile"
 import { GlobalLayout } from "@/components/global-layout"
 import { InfiniteScrollGames } from "@/components/infinity-scroll"
 import ScrollToTop from "@/components/scroll-to-top"
@@ -10,12 +11,19 @@ export default async function GamesPage() {
             mainContent={
                 <>
                     <ScrollToTop />
+
                     <InfiniteScrollGames />
+
+                    <div className="md:hidden">
+                        <PopoverSort />
+                    </div>
                 </>
             }
 
             sideContent={
-                <Sort />
+                <div className="hidden md:block">
+                    <Sort />
+                </div>
             }
         />
     )
diff --git a/components/add-game-dropdown.tsx b/components/add-game-dropdown.tsx
index ebb85fba9c004bbb2ef5e1037caa7d59fe977758..a426662129c67651acdf6e0ec756ce2e832cd24c 100644
--- a/components/add-game-dropdown.tsx
+++ b/components/add-game-dropdown.tsx
@@ -14,9 +14,9 @@ export default function AddGameDropdown(props: { gameid: string, fullUser: User
                 </SelectTrigger>
                 <SelectContent>
                     <SelectGroup className="space-y-3 w-full">
-                        <AddGameToPlanList user={props.fullUser!} gameId={props.gameid} />
                         <AddGameToFinishedList user={props.fullUser!} gameId={props.gameid} />
                         <AddGameToPlayingList user={props.fullUser!} gameId={props.gameid} />
+                        <AddGameToPlanList user={props.fullUser!} gameId={props.gameid} />
                     </SelectGroup>
                 </SelectContent>
             </Select>
diff --git a/components/addGameToFavList.tsx b/components/addGameToFavList.tsx
index 6ad1725c265a25dedba575813d7b0a0bc4863337..039384507cd22e61cb3990d0c56a6b005e60c893 100644
--- a/components/addGameToFavList.tsx
+++ b/components/addGameToFavList.tsx
@@ -47,7 +47,7 @@ export default function AddGameToFavList(props: { userGameList: Number[], gameId
     }
 
 
-    let button = <div></div>
+    let button = <></>
     try {
         if (!props.userGameList.includes(parseFloat(props.gameId))) {
             button = (
diff --git a/components/create-gweet/components/create-gweet.tsx b/components/create-gweet/components/create-gweet.tsx
index 2b1b719b0954673061b575ffc2c4e8114f74b15f..300c9b048f7a8931ad977b65a3f6eecf9ee268dd 100644
--- a/components/create-gweet/components/create-gweet.tsx
+++ b/components/create-gweet/components/create-gweet.tsx
@@ -221,7 +221,7 @@ export const CreateGweet = ({
                                     render={({ field }) => (
                                         <FormItem>
                                             <FormControl>
-                                                <Textarea
+                                                <Textarea id="gweet"
                                                     placeholder={placeholder || isComment ? "Gweet your reply" : "What's on your mind?"}
                                                     className="resize-none min-h-[100px]"
                                                     disabled={isLoading || !session.user}
diff --git a/components/filter-sort-games-mobile.tsx b/components/filter-sort-games-mobile.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..a58320485961e558bcabc028188ff8ee8374288f
--- /dev/null
+++ b/components/filter-sort-games-mobile.tsx
@@ -0,0 +1,27 @@
+import { Button } from "@/components/ui/button"
+import {
+    Popover,
+    PopoverContent,
+    PopoverTrigger,
+} from "@/components/ui/popover"
+import Sort from "./filter-sort-games"
+import { Icons } from "./icons"
+
+export function PopoverSort() {
+    return (
+        <div className="fixed z-[60] bottom-0 right-0 py-20 px-6 md:hidden">
+            <Popover>
+                <div className="w-14 h-14 rounded-full bg-secondary">
+                    <PopoverTrigger asChild className="flex justify-end">
+                        <Button variant="secondary" className="w-14 h-14 rounded-full">
+                            <Icons.filter />
+                        </Button>
+                    </PopoverTrigger>
+                </div>
+                <PopoverContent className="w-60 m-1">
+                    <Sort />
+                </PopoverContent>
+            </Popover>
+        </div>
+    )
+}
\ No newline at end of file
diff --git a/components/filter-sort-games.tsx b/components/filter-sort-games.tsx
index 1d209973b41afef083406dc9f0950c25b90b21ea..780f7e846976a46c89fed2a5b9d966e8867a6b1a 100644
--- a/components/filter-sort-games.tsx
+++ b/components/filter-sort-games.tsx
@@ -8,17 +8,22 @@ import { Button } from "./ui/button"
 import { Card } from "./ui/card"
 
 export default function Sort() {
-    const [selectedCategory, setSelectedCategory] = useState('')
-    const [selectedGenre, setSelectedGenre] = useState('')
-    const [selectedPlatform, setSelectedPlatform] = useState('')
-    const [selectedSortMethod, setSelectedSortMethod] = useState('total_rating_count')
-    const [selectedSortOrder, setSelectedSortOrder] = useState('desc')
-
     const router = useRouter()
     const pathname = usePathname()
     const searchParams = useSearchParams()
 
     const search = searchParams.get('search')
+    const cat = searchParams.get('category')
+    const gen = searchParams.get('genre')
+    const plat = searchParams.get('platform')
+    const sortm = searchParams.get('sortby')
+    const sorto = searchParams.get('order')
+
+    const [selectedCategory, setSelectedCategory] = useState(cat || '')
+    const [selectedGenre, setSelectedGenre] = useState(gen || '')
+    const [selectedPlatform, setSelectedPlatform] = useState(plat || '')
+    const [selectedSortMethod, setSelectedSortMethod] = useState(sortm || 'total_rating_count')
+    const [selectedSortOrder, setSelectedSortOrder] = useState(sorto || 'desc')
 
     const urlParams = {
         search: search ? `search=${search}` : '',
@@ -36,11 +41,11 @@ export default function Sort() {
 
     const url = `${pathname}${queryParamString ? `${queryParamString}` : ''}`
 
-    // useEffect(() => {
-    //   if (queryParamString) {
-    router.replace(url)
-    //   }
-    // }, [queryParamString, router, url]);
+    useEffect(() => {
+        if (url) {
+            router.push(url) // needs fix for after game details page
+        }
+    }, [router, url])
 
     function toggleSortOrder() {
         const newSortOrder = selectedSortOrder === 'desc' ? 'asc' : 'desc'
@@ -80,7 +85,7 @@ export default function Sort() {
                 <SelectTrigger className={`bg-background border-none w-full ${selectedGenre[0] ? 'font-extrabold' : ''}`}>
                     <SelectValue placeholder="By genre..." />
                 </SelectTrigger>
-                <SelectContent>
+                <SelectContent className="max-h-52">
                     <SelectGroup>
                         <SelectLabel>Genre</SelectLabel>
                         <SelectItem value="fighting">Fighting</SelectItem>
@@ -88,11 +93,9 @@ export default function Sort() {
                         <SelectItem value="music">Music</SelectItem>
                         <SelectItem value="platform">Platformer</SelectItem>
                         <SelectItem value="puzzle">Puzzle</SelectItem>
-                        <SelectItem value="real-time-strategy-rts">Real Time Strategy</SelectItem>
                         <SelectItem value="role-playing-rpg">Role-playing</SelectItem>
                         <SelectItem value="simulator">Simulation</SelectItem>
                         <SelectItem value="sport">Sport</SelectItem>
-                        <SelectItem value="turn-based-strategy-tbs">Turn-based strategy</SelectItem>
                         <SelectItem value="tactical">Tactical</SelectItem>
                         <SelectItem value="quiz-trivia">Quiz/Trivia</SelectItem>
                         <SelectItem value="hack-and-slash-beat-em-up">Hack and slash</SelectItem>
@@ -100,7 +103,6 @@ export default function Sort() {
                         <SelectItem value="adventure">Adventure</SelectItem>
                         <SelectItem value="arcade">Arcade</SelectItem>
                         <SelectItem value="visual-novel">Visual Novel</SelectItem>
-                        <SelectItem value="card-and-board-game">Card & Board Game</SelectItem>
                         <SelectItem value="adventure">Adventure</SelectItem>
                         <SelectItem value="moba">Moba</SelectItem>
                         <SelectItem value="point-and-click">Point-and-click</SelectItem>
diff --git a/components/icons.tsx b/components/icons.tsx
index 78360c4449c01148c53940b9ea04473318f8df22..26fc3bd2f9cd9d0b2a81dc2a62eb871a3967e80c 100644
--- a/components/icons.tsx
+++ b/components/icons.tsx
@@ -8,9 +8,7 @@ import {
     Check,
     ChevronLeft,
     ChevronRight,
-    CreditCard,
-    File,
-    FileText,
+    Filter,
     Gamepad2,
     Github,
     Heart,
@@ -23,12 +21,10 @@ import {
     Loader2,
     LucideProps,
     MapPin,
+    Menu,
     MessageCircle,
     Moon,
     MoreHorizontal,
-    MoreVertical,
-    Pizza,
-    Plus,
     Repeat2,
     Settings,
     SunMedium,
@@ -88,20 +84,16 @@ export const Icons = {
     trash: Trash, // Delete Button
     link: Link, // Link Button
     regweet: Repeat2, // Regweet Button
-    location: MapPin, // Location Button
-    website: Link2, // Website Button
-    calendar: CalendarRange, // Calendar Button
-    camera: SwitchCamera, // Change Image Button
-    terminal: TerminalIcon, // Terminal Icon
-    post: FileText,
-    page: File,
-    media: Image,
-    billing: CreditCard,
-    ellipsis: MoreVertical,
-    add: Plus,
+    location: MapPin, // Location on Profile
+    website: Link2, // Website on Profile
+    calendar: CalendarRange, // Joined Date on Profile
+    camera: SwitchCamera, // Change Profile Image Button
+    terminal: TerminalIcon, // Terminal Error Icon
+    menu: Menu, // Mobile Menu Icon
+    media: Image, // Media Gweet Icon
+    filter: Filter, // Filter Games Icon
     warning: AlertTriangle,
     arrowRight: ArrowRight,
-    pizza: Pizza,
     laptop: Laptop,
     check: Check,
 }
\ No newline at end of file
diff --git a/components/mode-toggle.tsx b/components/mode-toggle.tsx
index aa1e5827a5b28455b6b8963e73bfe6f5d64d646b..6e4f5e7a7ec9cfffb2473cbfd3568cc2fd7b92e5 100644
--- a/components/mode-toggle.tsx
+++ b/components/mode-toggle.tsx
@@ -1,7 +1,6 @@
 "use client"
 
 import { Icons } from "@/components/icons"
-import { Button } from "@/components/ui/button"
 import {
     DropdownMenu,
     DropdownMenuContent,
diff --git a/components/nav-header.tsx b/components/nav-header.tsx
index 7ca5c509a6c70fc222757ca6604c5f339665c9eb..f24d66bcc7104d64e093a037455d6e460d018ffc 100644
--- a/components/nav-header.tsx
+++ b/components/nav-header.tsx
@@ -1,10 +1,10 @@
-import Link from "next/link"
-
-import { cn } from "@/lib/utils"
 import { User } from "next-auth"
+import Link from "next/link"
+import { PopoverSort } from "./filter-sort-games-mobile"
 import { GameUnityLogo } from "./logo"
+import { MobileSheet } from "./nav-mobile-sheet"
 import SearchInput from "./search/components/search-input"
-import { Button, buttonVariants } from "./ui/button"
+import { Button } from "./ui/button"
 import { UserAccountDropdown } from "./user-nav"
 
 export const Header = ({ user }: { user: User | undefined }) => {
@@ -21,8 +21,8 @@ export const Header = ({ user }: { user: User | undefined }) => {
 
                 <SearchInput className="p-3 w-3/6 2xl:w-2/6" />
 
-                {user ?
-                    <div className={cn(buttonVariants({ variant: "ghost", size: "logo" }))}>
+                {user &&
+                    <div className="hidden md:block">
                         <UserAccountDropdown
                             user={{
                                 name: user.name,
@@ -31,10 +31,13 @@ export const Header = ({ user }: { user: User | undefined }) => {
                             }}
                         />
                     </div>
-                    :
-                    <span className="w-12" />
                 }
+
+                <div className="md:hidden">
+                    <MobileSheet user={user} />
+                </div>
             </div>
+
         </header>
     )
 }
\ No newline at end of file
diff --git a/components/nav-mobile-sheet.tsx b/components/nav-mobile-sheet.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..e546ab766fba760ee03080e9538d55ce28af10d3
--- /dev/null
+++ b/components/nav-mobile-sheet.tsx
@@ -0,0 +1,85 @@
+"use client"
+
+import { Icons } from "@/components/icons"
+import { Button, buttonVariants } from "@/components/ui/button"
+import {
+    Sheet,
+    SheetClose,
+    SheetContent,
+    SheetDescription,
+    SheetHeader,
+    SheetTitle,
+    SheetTrigger,
+} from "@/components/ui/sheet"
+import { cn } from "@/lib/utils"
+import { User } from "next-auth"
+import { signOut } from "next-auth/react"
+import Link from "next/link"
+import { GameUnityLogo } from "./logo"
+import { ModeToggle } from "./mode-toggle"
+import { NavPromo } from "./nav-promo"
+import { UserAvatar } from "./user-avatar"
+
+export const MobileSheet = ({ user }: { user: User | undefined }) => {
+    return (
+        <Sheet>
+            <SheetTrigger asChild>
+                <div className={cn(buttonVariants({ variant: "ghost", size: "logo" }), "w-12 cursor-pointer")}>
+                    {user ?
+                        <UserAvatar
+                            user={{ username: user.username ?? null, image: user.image ?? null }}
+                            className="h-8 w-8"
+                        />
+                        :
+                        <Icons.menu />}
+                </div>
+            </SheetTrigger>
+            <SheetContent>
+                {!user ?
+                    <div className="flex flex-col justify-center items-center h-full space-y-6">
+                        <GameUnityLogo />
+                        <NavPromo />
+                    </div>
+                    :
+                    <div className="flex flex-col justify-center items-center h-full">
+                        <SheetClose asChild>
+                            <Link href={`${user.username}`} className="flex flex-col justify-center items-center">
+                                <UserAvatar
+                                    user={{ username: user.username ?? null, image: user.image ?? null }}
+                                    className="h-16 w-16"
+                                />
+                                <SheetHeader className="pt-6">
+                                    <SheetTitle>{user.name}</SheetTitle>
+                                    <SheetDescription className="text-sky-500 text-center">
+                                        @{user.username}
+                                    </SheetDescription>
+                                </SheetHeader>
+                            </Link>
+                        </SheetClose>
+
+                        <div className="flex flex-col items-center space-y-6 pt-12">
+                            <SheetClose asChild>
+                                <Link href="/settings" className={cn(buttonVariants({ variant: "outline", size: "lg" }), "w-full")}>
+                                    Settings
+                                </Link>
+                            </SheetClose>
+
+                            <Button variant="outline" size="lg"
+                                onClick={(event) => {
+                                    event.preventDefault()
+                                    signOut({
+                                        callbackUrl: `${window.location.origin}/login`,
+                                    })
+                                }}
+                            >
+                                Sign out
+                            </Button>
+
+                            <ModeToggle />
+                        </div>
+                    </div>
+                }
+            </SheetContent>
+        </Sheet>
+    )
+}
\ No newline at end of file
diff --git a/components/nav-promo.tsx b/components/nav-promo.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..6d45ece92e52c946078756a0b2b84b087b56bfe2
--- /dev/null
+++ b/components/nav-promo.tsx
@@ -0,0 +1,19 @@
+import { buttonVariants } from "@/components/ui/button"
+import { cn } from "@/lib/utils"
+import Link from "next/link"
+
+export const NavPromo = () => {
+    return (
+        <div className="space-y-6 justify-center text-center">
+            <Link href="/login" className={cn(buttonVariants({ size: "lg" }), "w-full")}>
+                Log In
+            </Link>
+            <Link href="/signup" className={cn(buttonVariants({ size: "lg", variant: "outline" }), "w-full")}>
+                Sign Up
+            </Link>
+            <h4 className="text-sm">
+                Unlock endless possibilities - sign up or log in to unleash the full potential of our website.
+            </h4>
+        </div>
+    )
+}
\ No newline at end of file
diff --git a/components/nav-sidebar.tsx b/components/nav-sidebar.tsx
index 382419d20e85e63beb8a84c03435612193be7059..14da27066916d8d69de0ccd0e1cde91ec153a6cb 100644
--- a/components/nav-sidebar.tsx
+++ b/components/nav-sidebar.tsx
@@ -8,6 +8,7 @@ import { User } from "next-auth"
 import Link from "next/link"
 import { usePathname } from "next/navigation"
 import { ModeToggle } from "./mode-toggle"
+import { NavPromo } from "./nav-promo"
 
 export const Sidebar = ({ items, user }: { items: SidebarNavItem[], user: User | undefined }) => {
     const path = usePathname()
@@ -43,19 +44,11 @@ export const Sidebar = ({ items, user }: { items: SidebarNavItem[], user: User |
                 )
             })}
             <ModeToggle />
-            {!user && (
-                <div className="mt-24 space-y-3 justify-center text-center">
-                    <Link href="/login" className={cn(buttonVariants({ size: "lg" }), "w-full")}>
-                        Log In
-                    </Link>
-                    <Link href="/signup" className={cn(buttonVariants({ size: "lg", variant: "outline" }), "w-full")}>
-                        Sign Up
-                    </Link>
-                    <h4 className="text-sm">
-                        Unlock endless possibilities - sign up or log in to unleash the full potential of our website.
-                    </h4>
+            {!user &&
+                <div className="mt-24">
+                    <NavPromo />
                 </div>
-            )}
+            }
         </nav>
     )
 }
\ No newline at end of file
diff --git a/components/profile/components/edit-profile-modal.tsx b/components/profile/components/edit-profile-modal.tsx
index 6039e781a8b2e4d8557b2f5c8c75dc1c8ffe9c36..0a6abf67b7da311f79dde76c5ce9ec48d995e7f0 100644
--- a/components/profile/components/edit-profile-modal.tsx
+++ b/components/profile/components/edit-profile-modal.tsx
@@ -19,6 +19,7 @@ import { Label } from "@/components/ui/label"
 import { Textarea } from "@/components/ui/textarea"
 import { toast } from "@/components/ui/use-toast"
 import { UserAvatar } from "@/components/user-avatar"
+import { checkURL } from "@/lib/utils"
 import { zodResolver } from "@hookform/resolvers/zod"
 import Image from "next/image"
 import { useRouter } from "next/navigation"
@@ -32,7 +33,9 @@ const FormSchema = z.object({
     name: z.string().min(1, "Name can't be blank").max(50, "Name can't be more than 50 characters"),
     bio: z.string().max(160, "Bio can't be more than 160 characters").optional(),
     location: z.string().max(30, "Location can't be more than 30 characters").optional(),
-    website: z.string().max(100, "Website can't be more than 100 characters").optional(),
+    website: z.string().max(100, "Website can't be more than 100 characters")
+        .refine((value) => checkURL(value), "Website needs to be a valid URL.")
+        .optional().or(z.literal('')),
 })
 
 const ImagesSchema = z.custom<File>().refine((file) => file instanceof File, { message: "Expected a file" })
@@ -69,6 +72,10 @@ export const EditProfileModal = ({ user }: { user: IUser }) => {
     async function onSave(formData: z.infer<typeof FormSchema>) {
         if (!user) return null
 
+        if (formData.website && (!formData.website.startsWith("http://") || !formData.website.startsWith("https://"))) {
+            formData.website = `http://${formData.website}`
+        }
+
         const dirty = form.formState.dirtyFields
         const profile: IProfile = {
             name: formData.name,
diff --git a/components/profile/components/profile-user-info.tsx b/components/profile/components/profile-user-info.tsx
index 914b6fdbf9a35359366fb785fefc7f95a9f2e0a1..ab5fd2f07159b317da9ea0c7fe83b8db660d5c36 100644
--- a/components/profile/components/profile-user-info.tsx
+++ b/components/profile/components/profile-user-info.tsx
@@ -72,7 +72,9 @@ export const ProfileUserInfo = async ({ user }: { user: IUser }) => {
                     {user.website &&
                         <div className="flex items-center">
                             <Icons.website className="mr-1" />
-                            <div>{user.website}</div>
+                            <Link href={user.website} prefetch={false} target="_blank">
+                                {user.website.replace("http://", "").replace("https://", "").replace("www.", "")}
+                            </Link>
                         </div>
                     }
                     {user.createdAt && <UserJoinDate date={user.createdAt} />}
diff --git a/components/profile/components/user-games.tsx b/components/profile/components/user-games.tsx
index 33d683cde760809ba6e7c51ba40f3469dd52769e..c2b6e037f124f856b6f75aa52d50440c9ea216cc 100644
--- a/components/profile/components/user-games.tsx
+++ b/components/profile/components/user-games.tsx
@@ -35,7 +35,7 @@ export const UserGames = async ({ username }: { username: string }) => {
         finishedGames = fetchedGames.filter(game => fullUser.finishedGameList.includes(game.id))
         planningGames = fetchedGames.filter(game => fullUser.planningGameList.includes(game.id))
     }
-    console.log(favoritegames)
+
     // Old Implementation
     // if (fullUser?.favGameList?.length !== 0 && fullUser?.favGameList?.length != undefined) {
     //     favoritegames = await getFavoriteGames(fullUser?.favGameList!)
diff --git a/components/search/components/search-input.tsx b/components/search/components/search-input.tsx
index 0a25f256a93282d2088969bee21de7bdc5d64ec4..628763314c2921837661c0c1caa6c380bcf809a9 100644
--- a/components/search/components/search-input.tsx
+++ b/components/search/components/search-input.tsx
@@ -46,6 +46,7 @@ export default function SearchInput({ className, ...props }: DocsSearchProps) {
             {...props}
         >
             <Input
+                id='search'
                 type="search"
                 placeholder="Search..."
                 className="rounded-full pr-12"
diff --git a/components/ui/popover.tsx b/components/ui/popover.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..17af15193531262983c4a8827022ab10db5ee0e6
--- /dev/null
+++ b/components/ui/popover.tsx
@@ -0,0 +1,31 @@
+"use client"
+
+import * as PopoverPrimitive from "@radix-ui/react-popover"
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Popover = PopoverPrimitive.Root
+
+const PopoverTrigger = PopoverPrimitive.Trigger
+
+const PopoverContent = React.forwardRef<
+    React.ElementRef<typeof PopoverPrimitive.Content>,
+    React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>
+>(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
+    <PopoverPrimitive.Portal>
+        <PopoverPrimitive.Content
+            ref={ref}
+            align={align}
+            sideOffset={sideOffset}
+            className={cn(
+                "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+                className
+            )}
+            {...props}
+        />
+    </PopoverPrimitive.Portal>
+))
+PopoverContent.displayName = PopoverPrimitive.Content.displayName
+
+export { Popover, PopoverContent, PopoverTrigger }
diff --git a/components/user-nav.tsx b/components/user-nav.tsx
index 6883170854d2ef63424c56978f6ce814b9e037bf..5df3b5576ba59d4b32a067332edc9268c733c1f1 100644
--- a/components/user-nav.tsx
+++ b/components/user-nav.tsx
@@ -11,6 +11,8 @@ import {
     DropdownMenuTrigger,
 } from "@/components/ui/dropdown-menu"
 import { UserAvatar } from "@/components/user-avatar"
+import { cn } from "@/lib/utils"
+import { buttonVariants } from "./ui/button"
 
 type UserUsername = string | null | undefined
 
@@ -21,13 +23,15 @@ interface UserAccountNavProps extends React.HTMLAttributes<HTMLDivElement> {
 export function UserAccountDropdown({ user }: UserAccountNavProps) {
     return (
         <DropdownMenu>
-            <DropdownMenuTrigger className="rounded-full">
-                <UserAvatar
-                    user={{ username: user.username ? user.username : "", image: user.image || null }}
-                    className="h-8 w-8 shadow-none focus:shadow-none"
-                />
+            <DropdownMenuTrigger>
+                <div className={cn(buttonVariants({ variant: "ghost", size: "logo" }), "w-12")}>
+                    <UserAvatar
+                        user={{ username: user.username ? user.username : "", image: user.image || null }}
+                        className="h-8 w-8 shadow-none focus:shadow-none"
+                    />
+                </div>
             </DropdownMenuTrigger>
-            <DropdownMenuContent align="end" className="mt-1">
+            <DropdownMenuContent align="end">
                 <div className="flex items-center justify-start gap-2 p-2">
                     <div className="flex flex-col space-y-1 leading-none">
                         {user.name && <p className="font-medium">{user.name}</p>}
diff --git a/lib/utils.ts b/lib/utils.ts
index 47c519ae41565f6fb8b3889b351730294574a6af..4f3885e3b7e6028fea5491bf54be4e19c3ea3c12 100644
--- a/lib/utils.ts
+++ b/lib/utils.ts
@@ -55,4 +55,23 @@ export default function getURL(path: string) {
         ? env.NEXT_PUBLIC_APP_URL!
         : window.location.origin
     return new URL(path, baseURL).toString()
+}
+
+export function checkURL(value: string) {
+    if (!value) return true
+    const pattern = new RegExp(
+        '^(https?:\\/\\/)?' + // protocol
+        '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
+        '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
+        '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
+        '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
+        '(\\#[-a-z\\d_]*)?$', // fragment locator
+        'i'
+    )
+    try {
+        const url = new URL(`${(value.startsWith("http://") || value.startsWith("https://")) ? value : `http://${value}`}`)
+        return pattern.test(url.href)
+    } catch {
+        return false
+    }
 }
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 6683de5f53111aed65e326d3a9aa29002e8abb5e..44f05c6fe4adf7199168740861acc1ea4b39a988 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,6 +19,7 @@
                 "@radix-ui/react-dropdown-menu": "^2.0.5",
                 "@radix-ui/react-hover-card": "^1.0.6",
                 "@radix-ui/react-label": "^2.0.2",
+                "@radix-ui/react-popover": "^1.0.6",
                 "@radix-ui/react-scroll-area": "^1.0.4",
                 "@radix-ui/react-select": "^1.2.2",
                 "@radix-ui/react-separator": "^1.0.3",
@@ -2162,6 +2163,43 @@
                 }
             }
         },
+        "node_modules/@radix-ui/react-popover": {
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.6.tgz",
+            "integrity": "sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==",
+            "dependencies": {
+                "@babel/runtime": "^7.13.10",
+                "@radix-ui/primitive": "1.0.1",
+                "@radix-ui/react-compose-refs": "1.0.1",
+                "@radix-ui/react-context": "1.0.1",
+                "@radix-ui/react-dismissable-layer": "1.0.4",
+                "@radix-ui/react-focus-guards": "1.0.1",
+                "@radix-ui/react-focus-scope": "1.0.3",
+                "@radix-ui/react-id": "1.0.1",
+                "@radix-ui/react-popper": "1.1.2",
+                "@radix-ui/react-portal": "1.0.3",
+                "@radix-ui/react-presence": "1.0.1",
+                "@radix-ui/react-primitive": "1.0.3",
+                "@radix-ui/react-slot": "1.0.2",
+                "@radix-ui/react-use-controllable-state": "1.0.1",
+                "aria-hidden": "^1.1.1",
+                "react-remove-scroll": "2.5.5"
+            },
+            "peerDependencies": {
+                "@types/react": "*",
+                "@types/react-dom": "*",
+                "react": "^16.8 || ^17.0 || ^18.0",
+                "react-dom": "^16.8 || ^17.0 || ^18.0"
+            },
+            "peerDependenciesMeta": {
+                "@types/react": {
+                    "optional": true
+                },
+                "@types/react-dom": {
+                    "optional": true
+                }
+            }
+        },
         "node_modules/@radix-ui/react-popper": {
             "version": "1.1.2",
             "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz",
diff --git a/package.json b/package.json
index d627ceef5c0d8f3baf951985aef26fd05918b37b..f0cefafe23771a94afba5e923017c9d5ef3c4dcf 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,7 @@
         "@radix-ui/react-dropdown-menu": "^2.0.5",
         "@radix-ui/react-hover-card": "^1.0.6",
         "@radix-ui/react-label": "^2.0.2",
+        "@radix-ui/react-popover": "^1.0.6",
         "@radix-ui/react-scroll-area": "^1.0.4",
         "@radix-ui/react-select": "^1.2.2",
         "@radix-ui/react-separator": "^1.0.3",
@@ -82,4 +83,4 @@
         "semver": "^7.5.3",
         "optionator": "^0.9.3"
     }
-}
\ No newline at end of file
+}