Index: frontend/src/App.tsx
===================================================================
--- frontend/src/App.tsx	(revision 765e166b79bd65b570078fd2d0b5b84754b04258)
+++ frontend/src/App.tsx	(revision 947fcaadc3ddb75ae7bee1ae398ae0f43c988c1e)
@@ -13,5 +13,5 @@
 import { useAuth } from "./context/authContext";
 import { usePlayer } from "./context/playerContext";
-import AllUsers from "./pages/AllUsers";
+// import AllUsers from "./pages/AllUsers";
 import LandingPage from "./pages/LandingPage";
 import Login from "./pages/Login";
@@ -95,8 +95,8 @@
 				element: <Login />,
 			},
-			{
-				path: "/users",
-				element: <AllUsers />,
-			},
+			// {
+			// 	path: "/users",
+			// 	element: <AllUsers />,
+			// },
 			{
 				path: "/users/:username",
Index: frontend/src/components/Sidebar.tsx
===================================================================
--- frontend/src/components/Sidebar.tsx	(revision 765e166b79bd65b570078fd2d0b5b84754b04258)
+++ frontend/src/components/Sidebar.tsx	(revision 947fcaadc3ddb75ae7bee1ae398ae0f43c988c1e)
@@ -5,276 +5,276 @@
 import { useAuth } from "../context/authContext";
 import { usePlayer } from "../context/playerContext";
+import { useCreatedPlaylists } from "../context/playlistContext";
+import { getErrorMessage } from "../utils/error";
 import type { BasicSong, SidebarProps } from "../utils/types";
 import { toEmbedUrl } from "../utils/utils";
-import { useCreatedPlaylists } from "../context/playlistContext";
 import CreatePlaylistModal from "./playlist/CreatePlaylistModal";
-import { getErrorMessage } from "../utils/error";
 
 const Sidebar = ({ isOpen, onClose }: SidebarProps) => {
-  const { user } = useAuth();
-  const {
-    createdPlaylists,
-    isLoading: playlistsLoading,
-    refreshPlaylists,
-  } = useCreatedPlaylists();
-  const navigate = useNavigate();
-  const { play, currentSong } = usePlayer();
-  const [recentlyListened, setRecentlyListened] = useState<BasicSong[]>([]);
-  const [songsLoading, setSongsLoading] = useState(false);
-  const [isModalOpen, setIsModalOpen] = useState(false);
-
-  useEffect(() => {
-    const fetchData = async () => {
-      setSongsLoading(true);
-      try {
-        const data = await axiosInstance.get<BasicSong[]>("/songs/recent");
-        setRecentlyListened(data.data);
-      } catch (error) {
-        toast.error(getErrorMessage(error));
-      } finally {
-        setSongsLoading(false);
-      }
-    };
-    if (user) {
-      fetchData();
-    } else {
-      setRecentlyListened([]);
-      setSongsLoading(false);
-    }
-  }, [user]);
-
-  const isLoading = songsLoading || playlistsLoading;
-
-  return (
-    <>
-      <div
-        className={`fixed left-0 top-0 h-full bg-[#121212] border-r border-white/10 transition-transform duration-300 ease-in-out z-40 ${
-          isOpen ? "translate-x-0" : "-translate-x-full"
-        } w-64 overflow-y-auto`}
-      >
-        <div className="p-6">
-          {/* Sidebar Header */}
-          <div className="flex justify-between items-center mb-6 pt-2">
-            <h2 className="text-xl font-bold text-white">Library</h2>
-            <button
-              onClick={onClose}
-              className="text-gray-400 hover:text-white transition-colors"
-              aria-label="Close sidebar"
-            >
-              <svg
-                className="w-6 h-6"
-                fill="none"
-                stroke="currentColor"
-                viewBox="0 0 24 24"
-              >
-                <path
-                  strokeLinecap="round"
-                  strokeLinejoin="round"
-                  strokeWidth={2}
-                  d="M6 18L18 6M6 6l12 12"
-                />
-              </svg>
-            </button>
-          </div>
-
-          {/* Loading State */}
-          {isLoading ? (
-            <div className="flex items-center justify-center py-16">
-              <div className="animate-spin rounded-full h-12 w-12 border-b-2 border-[#1db954]"></div>
-            </div>
-          ) : (
-            <>
-              {/* Recently Listened */}
-              <div className="mb-8">
-                <h3 className="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-4">
-                  Recently Played
-                </h3>
-                <div className="space-y-3">
-                  {recentlyListened.map((song) => (
-                    <div
-                      key={song.id}
-                      className="flex items-center gap-3 p-2 rounded-lg hover:bg-white/5 cursor-pointer transition-colors group relative"
-                    >
-                      <img
-                        src={
-                          song.cover
-                            ? `${baseURL}/${song.cover}`
-                            : "/favicon.png"
-                        }
-                        alt={song.title}
-                        className="w-10 h-10 rounded object-cover"
-                        onError={(e) => {
-                          (e.target as HTMLImageElement).src = "/favicon.png";
-                        }}
-                      />
-                      <div className="flex-1 min-w-0">
-                        <p
-                          onClick={() => navigate(`/songs/${song.id}`)}
-                          className="text-sm font-medium text-white truncate hover:underline cursor-pointer"
-                        >
-                          {song.title}
-                        </p>
-                        <div className="flex items-center gap-1 text-xs text-gray-400">
-                          <span
-                            onClick={(e) => {
-                              e.stopPropagation();
-                              if (song.artistUsername) {
-                                navigate(`/users/${song.artistUsername}`);
-                              }
-                            }}
-                            className={`truncate ${
-                              song.artistUsername
-                                ? "hover:underline cursor-pointer hover:text-white"
-                                : ""
-                            }`}
-                          >
-                            {song.artist}
-                          </span>
-                          {song.album && (
-                            <>
-                              <span>•</span>
-                              <span
-                                onClick={(e) => {
-                                  e.stopPropagation();
-                                  if (song.albumId) {
-                                    navigate(
-                                      `/collection/album/${song.albumId}`,
-                                    );
-                                  }
-                                }}
-                                className={`truncate ${
-                                  song.albumId
-                                    ? "hover:underline cursor-pointer hover:text-white"
-                                    : ""
-                                }`}
-                              >
-                                {song.album}
-                              </span>
-                            </>
-                          )}
-                        </div>
-                      </div>
-                      {song.link && (
-                        <button
-                          onClick={(e) => {
-                            e.stopPropagation();
-                            play({
-                              id: song.id,
-                              title: song.title,
-                              artist: song.artist,
-                              cover: song.cover,
-                              embedUrl: toEmbedUrl(song.link!),
-                            });
-                          }}
-                          className={`p-1.5 rounded-full transition-all opacity-0 group-hover:opacity-100 ${
-                            currentSong?.id === song.id
-                              ? "bg-white text-[#1db954]"
-                              : "bg-[#1db954] text-black hover:scale-110"
-                          }`}
-                          aria-label={
-                            currentSong?.id === song.id
-                              ? "Now playing"
-                              : "Play song"
-                          }
-                        >
-                          {currentSong?.id === song.id ? (
-                            <svg
-                              className="w-4 h-4"
-                              fill="currentColor"
-                              viewBox="0 0 24 24"
-                            >
-                              <path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z" />
-                            </svg>
-                          ) : (
-                            <svg
-                              className="w-4 h-4"
-                              fill="currentColor"
-                              viewBox="0 0 24 24"
-                            >
-                              <path d="M8 5v14l11-7z" />
-                            </svg>
-                          )}
-                        </button>
-                      )}
-                    </div>
-                  ))}
-                </div>
-              </div>
-
-              {/* Playlists */}
-              <div>
-                <h3 className="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-4">
-                  Your Playlists
-                </h3>
-                <div className="space-y-2">
-                  {createdPlaylists?.map((playlist) => (
-                    <div
-                      key={playlist.id}
-                      onClick={() => {
-                        navigate(`/collection/playlist/${playlist.id}`);
-                      }}
-                      className="flex items-center justify-between p-3 rounded-lg hover:bg-white/5 cursor-pointer transition-colors"
-                    >
-                      <div className="flex items-center gap-3">
-                        <div className="w-10 h-10 bg-linear-to-br from-purple-500 to-pink-500 rounded flex items-center justify-center">
-                          <svg
-                            className="w-5 h-5 text-white"
-                            fill="currentColor"
-                            viewBox="0 0 20 20"
-                          >
-                            <path d="M18 3a1 1 0 00-1.196-.98l-10 2A1 1 0 006 5v9.114A4.369 4.369 0 005 14c-1.657 0-3 .895-3 2s1.343 2 3 2 3-.895 3-2V7.82l8-1.6v5.894A4.37 4.37 0 0015 12c-1.657 0-3 .895-3 2s1.343 2 3 2 3-.895 3-2V3z" />
-                          </svg>
-                        </div>
-                        <div>
-                          <p className="text-sm font-medium text-white">
-                            {playlist.name}
-                          </p>
-                          <p className="text-xs text-gray-400">
-                            {playlist.songCount} songs
-                          </p>
-                        </div>
-                      </div>
-                    </div>
-                  ))}
-
-                  {/* Create Playlist Button */}
-                  <button
-                    onClick={() => setIsModalOpen(true)}
-                    className="w-full flex items-center gap-3 p-3 rounded-lg hover:bg-white/5 cursor-pointer transition-colors group mt-2"
-                  >
-                    <div className="w-10 h-10 bg-[#282828] group-hover:bg-[#3a3a3a] rounded flex items-center justify-center transition-colors">
-                      <svg
-                        className="w-5 h-5 text-gray-400 group-hover:text-white transition-colors"
-                        fill="none"
-                        stroke="currentColor"
-                        viewBox="0 0 24 24"
-                      >
-                        <path
-                          strokeLinecap="round"
-                          strokeLinejoin="round"
-                          strokeWidth={2}
-                          d="M12 4v16m8-8H4"
-                        />
-                      </svg>
-                    </div>
-                    <p className="text-sm font-medium text-gray-400 group-hover:text-white transition-colors">
-                      Create Playlist
-                    </p>
-                  </button>
-                </div>
-              </div>
-            </>
-          )}
-        </div>
-      </div>
-
-      <CreatePlaylistModal
-        isOpen={isModalOpen}
-        onClose={() => setIsModalOpen(false)}
-        onSuccess={() => refreshPlaylists(false)}
-        songId={null}
-      />
-    </>
-  );
+	const { user } = useAuth();
+	const {
+		createdPlaylists,
+		isLoading: playlistsLoading,
+		refreshPlaylists,
+	} = useCreatedPlaylists();
+	const navigate = useNavigate();
+	const { play, currentSong } = usePlayer();
+	const [recentlyListened, setRecentlyListened] = useState<BasicSong[]>([]);
+	const [songsLoading, setSongsLoading] = useState(false);
+	const [isModalOpen, setIsModalOpen] = useState(false);
+
+	useEffect(() => {
+		const fetchData = async () => {
+			setSongsLoading(true);
+			try {
+				const data = await axiosInstance.get<BasicSong[]>("/songs/recent");
+				setRecentlyListened(data.data);
+			} catch (error) {
+				toast.error(getErrorMessage(error));
+			} finally {
+				setSongsLoading(false);
+			}
+		};
+		if (user) {
+			fetchData();
+		} else {
+			setRecentlyListened([]);
+			setSongsLoading(false);
+		}
+	}, [user]);
+
+	const isLoading = songsLoading || playlistsLoading;
+
+	return (
+		<>
+			<div
+				className={`fixed left-0 top-0 h-full bg-[#121212] border-r border-white/10 transition-transform duration-300 ease-in-out z-40 ${
+					isOpen ? "translate-x-0" : "-translate-x-full"
+				} w-64 overflow-y-auto`}
+			>
+				<div className="p-6">
+					{/* Sidebar Header */}
+					<div className="flex justify-between items-center mb-6 pt-2">
+						<h2 className="text-xl font-bold text-white">Library</h2>
+						<button
+							onClick={onClose}
+							className="text-gray-400 hover:text-white transition-colors cursor-pointer"
+							aria-label="Close sidebar"
+						>
+							<svg
+								className="w-6 h-6"
+								fill="none"
+								stroke="currentColor"
+								viewBox="0 0 24 24"
+							>
+								<path
+									strokeLinecap="round"
+									strokeLinejoin="round"
+									strokeWidth={2}
+									d="M6 18L18 6M6 6l12 12"
+								/>
+							</svg>
+						</button>
+					</div>
+
+					{/* Loading State */}
+					{isLoading ? (
+						<div className="flex items-center justify-center py-16">
+							<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-[#1db954]"></div>
+						</div>
+					) : (
+						<>
+							{/* Recently Listened */}
+							<div className="mb-8">
+								<h3 className="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-4">
+									Recently Played
+								</h3>
+								<div className="space-y-3">
+									{recentlyListened.map((song) => (
+										<div
+											key={song.id}
+											className="flex items-center gap-3 p-2 rounded-lg hover:bg-white/5 cursor-pointer transition-colors group relative"
+										>
+											<img
+												src={
+													song.cover
+														? `${baseURL}/${song.cover}`
+														: "/favicon.png"
+												}
+												alt={song.title}
+												className="w-10 h-10 rounded object-cover"
+												onError={(e) => {
+													(e.target as HTMLImageElement).src = "/favicon.png";
+												}}
+											/>
+											<div className="flex-1 min-w-0">
+												<p
+													onClick={() => navigate(`/songs/${song.id}`)}
+													className="text-sm font-medium text-white truncate hover:underline cursor-pointer"
+												>
+													{song.title}
+												</p>
+												<div className="flex items-center gap-1 text-xs text-gray-400">
+													<span
+														onClick={(e) => {
+															e.stopPropagation();
+															if (song.artistUsername) {
+																navigate(`/users/${song.artistUsername}`);
+															}
+														}}
+														className={`truncate ${
+															song.artistUsername
+																? "hover:underline cursor-pointer hover:text-white"
+																: ""
+														}`}
+													>
+														{song.artist}
+													</span>
+													{song.album && (
+														<>
+															<span>•</span>
+															<span
+																onClick={(e) => {
+																	e.stopPropagation();
+																	if (song.albumId) {
+																		navigate(
+																			`/collection/album/${song.albumId}`,
+																		);
+																	}
+																}}
+																className={`truncate ${
+																	song.albumId
+																		? "hover:underline cursor-pointer hover:text-white"
+																		: ""
+																}`}
+															>
+																{song.album}
+															</span>
+														</>
+													)}
+												</div>
+											</div>
+											{song.link && (
+												<button
+													onClick={(e) => {
+														e.stopPropagation();
+														play({
+															id: song.id,
+															title: song.title,
+															artist: song.artist,
+															cover: song.cover,
+															embedUrl: toEmbedUrl(song.link!),
+														});
+													}}
+													className={`p-1.5 rounded-full transition-all opacity-0 group-hover:opacity-100  ${
+														currentSong?.id === song.id
+															? "bg-white text-[#1db954]"
+															: "bg-[#1db954] text-black hover:scale-110 cursor-pointer"
+													}`}
+													aria-label={
+														currentSong?.id === song.id
+															? "Now playing"
+															: "Play song"
+													}
+												>
+													{currentSong?.id === song.id ? (
+														<svg
+															className="w-4 h-4"
+															fill="currentColor"
+															viewBox="0 0 24 24"
+														>
+															<path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z" />
+														</svg>
+													) : (
+														<svg
+															className="w-4 h-4"
+															fill="currentColor"
+															viewBox="0 0 24 24"
+														>
+															<path d="M8 5v14l11-7z" />
+														</svg>
+													)}
+												</button>
+											)}
+										</div>
+									))}
+								</div>
+							</div>
+
+							{/* Playlists */}
+							<div>
+								<h3 className="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-4">
+									Your Playlists
+								</h3>
+								<div className="space-y-2">
+									{createdPlaylists?.map((playlist) => (
+										<div
+											key={playlist.id}
+											onClick={() => {
+												navigate(`/collection/playlist/${playlist.id}`);
+											}}
+											className="flex items-center justify-between p-3 rounded-lg hover:bg-white/5 cursor-pointer transition-colors"
+										>
+											<div className="flex items-center gap-3">
+												<div className="w-10 h-10 bg-linear-to-br from-purple-500 to-pink-500 rounded flex items-center justify-center">
+													<svg
+														className="w-5 h-5 text-white"
+														fill="currentColor"
+														viewBox="0 0 20 20"
+													>
+														<path d="M18 3a1 1 0 00-1.196-.98l-10 2A1 1 0 006 5v9.114A4.369 4.369 0 005 14c-1.657 0-3 .895-3 2s1.343 2 3 2 3-.895 3-2V7.82l8-1.6v5.894A4.37 4.37 0 0015 12c-1.657 0-3 .895-3 2s1.343 2 3 2 3-.895 3-2V3z" />
+													</svg>
+												</div>
+												<div>
+													<p className="text-sm font-medium text-white">
+														{playlist.name}
+													</p>
+													<p className="text-xs text-gray-400">
+														{playlist.songCount} songs
+													</p>
+												</div>
+											</div>
+										</div>
+									))}
+
+									{/* Create Playlist Button */}
+									<button
+										onClick={() => setIsModalOpen(true)}
+										className="w-full flex items-center gap-3 p-3 rounded-lg hover:bg-white/5 cursor-pointer transition-colors group mt-2"
+									>
+										<div className="w-10 h-10 bg-[#282828] group-hover:bg-[#3a3a3a] rounded flex items-center justify-center transition-colors">
+											<svg
+												className="w-5 h-5 text-gray-400 group-hover:text-white transition-colors"
+												fill="none"
+												stroke="currentColor"
+												viewBox="0 0 24 24"
+											>
+												<path
+													strokeLinecap="round"
+													strokeLinejoin="round"
+													strokeWidth={2}
+													d="M12 4v16m8-8H4"
+												/>
+											</svg>
+										</div>
+										<p className="text-sm font-medium text-gray-400 group-hover:text-white transition-colors">
+											Create Playlist
+										</p>
+									</button>
+								</div>
+							</div>
+						</>
+					)}
+				</div>
+			</div>
+
+			<CreatePlaylistModal
+				isOpen={isModalOpen}
+				onClose={() => setIsModalOpen(false)}
+				onSuccess={() => refreshPlaylists(false)}
+				songId={null}
+			/>
+		</>
+	);
 };
 
Index: frontend/src/components/userProfile/UserListModal.tsx
===================================================================
--- frontend/src/components/userProfile/UserListModal.tsx	(revision 765e166b79bd65b570078fd2d0b5b84754b04258)
+++ frontend/src/components/userProfile/UserListModal.tsx	(revision 947fcaadc3ddb75ae7bee1ae398ae0f43c988c1e)
@@ -1,97 +1,97 @@
+import { useEffect } from "react";
 import { useNavigate } from "react-router-dom";
 import { baseURL } from "../../api/axiosInstance";
+import { useAuth } from "../../context/authContext";
 import type { BaseNonAdminUser } from "../../utils/types";
-import { useEffect } from "react";
-import { useAuth } from "../../context/authContext";
 
 interface ModalProps {
-  title: string;
-  users: BaseNonAdminUser[];
-  onClose: () => void;
-  onFollowToggle: (targetUsername: string) => Promise<void>;
+	title: string;
+	users: BaseNonAdminUser[];
+	onClose: () => void;
+	onFollowToggle: (targetUsername: string) => Promise<void>;
 }
 
 const UserListModal = ({
-  title,
-  users,
-  onClose,
-  onFollowToggle,
+	title,
+	users,
+	onClose,
+	onFollowToggle,
 }: ModalProps) => {
-  const navigate = useNavigate();
-  const { user } = useAuth();
-  useEffect(() => {
-    document.body.style.overflow = "hidden";
-    return () => {
-      document.body.style.overflow = "";
-    };
-  }, []);
+	const navigate = useNavigate();
+	const { user } = useAuth();
+	useEffect(() => {
+		document.body.style.overflow = "hidden";
+		return () => {
+			document.body.style.overflow = "";
+		};
+	}, []);
 
-  return (
-    <div className="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm">
-      <div className="bg-[#1a1a2e] border border-white/10 rounded-xl shadow-2xl w-full max-w-md max-h-[70vh] flex flex-col">
-        <div className="p-4 border-b border-white/10 flex justify-between items-center">
-          <h2 className="text-xl font-bold text-white">{title}</h2>
-          <button
-            onClick={onClose}
-            className="text-gray-400 hover:text-white text-2xl cursor-pointer transition-colors"
-          >
-            &times;
-          </button>
-        </div>
+	return (
+		<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm">
+			<div className="bg-[#1a1a2e] border border-white/10 rounded-xl shadow-2xl w-full max-w-md max-h-[70vh] flex flex-col">
+				<div className="p-4 border-b border-white/10 flex justify-between items-center">
+					<h2 className="text-xl font-bold text-white">{title}</h2>
+					<button
+						onClick={onClose}
+						className="text-gray-400 hover:text-white text-2xl cursor-pointer transition-colors"
+					>
+						&times;
+					</button>
+				</div>
 
-        <div className="overflow-y-auto p-4 flex-1">
-          {users.length === 0 ? (
-            <p className="text-center text-gray-500 py-8">No users found.</p>
-          ) : (
-            users.map((u) => (
-              <div
-                key={u.username}
-                className="flex items-center justify-between p-3 hover:bg-white/5 rounded-lg transition-colors"
-              >
-                <div
-                  className="flex items-center gap-4 cursor-pointer flex-1"
-                  onClick={() => {
-                    onClose();
-                    navigate(`/users/${u.username}`);
-                  }}
-                >
-                  <div className="w-10 h-10 rounded-full bg-[#282828] overflow-hidden shrink-0 flex items-center justify-center">
-                    {u.profilePhoto ? (
-                      <img
-                        src={`${baseURL}/${u.profilePhoto}`}
-                        className="w-full h-full object-cover"
-                        alt=""
-                      />
-                    ) : (
-                      <span className="text-[#1db954] font-bold">
-                        {u.fullName.charAt(0)}
-                      </span>
-                    )}
-                  </div>
-                  <div>
-                    <p className="font-semibold text-white">{u.fullName}</p>
-                    <p className="text-sm text-gray-400">@{u.username}</p>
-                  </div>
-                </div>
-                {user && (
-                  <button
-                    onClick={() => onFollowToggle(u.username)}
-                    className={`px-4 py-1.5 text-sm font-medium rounded-full transition-colors cursor-pointer ${
-                      u.isFollowedByCurrentUser
-                        ? "bg-white/10 text-white hover:bg-white/20"
-                        : "bg-[#1db954] text-black hover:bg-[#1ed760]"
-                    }`}
-                  >
-                    {u.isFollowedByCurrentUser ? "Following" : "Follow"}
-                  </button>
-                )}
-              </div>
-            ))
-          )}
-        </div>
-      </div>
-      <div className="absolute inset-0 -z-10" onClick={onClose}></div>
-    </div>
-  );
+				<div className="overflow-y-auto p-4 flex-1">
+					{users.length === 0 ? (
+						<p className="text-center text-gray-500 py-8">No users found.</p>
+					) : (
+						users.map((u) => (
+							<div
+								key={u.username}
+								className="flex items-center justify-between p-3 hover:bg-white/5 rounded-lg transition-colors"
+							>
+								<div
+									className="flex items-center gap-4 cursor-pointer flex-1"
+									onClick={() => {
+										onClose();
+										navigate(`/users/${u.username}`);
+									}}
+								>
+									<div className="w-10 h-10 rounded-full bg-[#282828] overflow-hidden shrink-0 flex items-center justify-center">
+										{u.profilePhoto ? (
+											<img
+												src={`${baseURL}/${u.profilePhoto}`}
+												className="w-full h-full object-cover"
+												alt=""
+											/>
+										) : (
+											<span className="text-[#1db954] font-bold">
+												{u.fullName.charAt(0)}
+											</span>
+										)}
+									</div>
+									<div>
+										<p className="font-semibold text-white">{u.fullName}</p>
+										<p className="text-sm text-gray-400">@{u.username}</p>
+									</div>
+								</div>
+								{user && user.username !== u.username && (
+									<button
+										onClick={() => onFollowToggle(u.username)}
+										className={`px-4 py-1.5 text-sm font-medium rounded-full transition-colors cursor-pointer ${
+											u.isFollowedByCurrentUser
+												? "bg-white/10 text-white hover:bg-white/20"
+												: "bg-[#1db954] text-black hover:bg-[#1ed760]"
+										}`}
+									>
+										{u.isFollowedByCurrentUser ? "Following" : "Follow"}
+									</button>
+								)}
+							</div>
+						))
+					)}
+				</div>
+			</div>
+			<div className="absolute inset-0 -z-10" onClick={onClose}></div>
+		</div>
+	);
 };
 
Index: frontend/src/pages/LandingPage.tsx
===================================================================
--- frontend/src/pages/LandingPage.tsx	(revision 765e166b79bd65b570078fd2d0b5b84754b04258)
+++ frontend/src/pages/LandingPage.tsx	(revision 947fcaadc3ddb75ae7bee1ae398ae0f43c988c1e)
@@ -6,498 +6,498 @@
 import SongResult from "../components/search/SongResult";
 import UserResult from "../components/search/UserResult";
+import { useAuth } from "../context/authContext";
 import { usePlayer } from "../context/playerContext";
 import type {
-  Album,
-  BaseNonAdminUser,
-  SearchCategory,
-  Song,
+	Album,
+	BaseNonAdminUser,
+	SearchCategory,
+	Song,
 } from "../utils/types";
 import { toEmbedUrl } from "../utils/utils";
-import { useAuth } from "../context/authContext";
 
 const CATEGORIES: { value: SearchCategory; label: string }[] = [
-  { value: "songs", label: "Songs" },
-  { value: "albums", label: "Albums" },
-  { value: "artists", label: "Artists" },
-  { value: "users", label: "Users" },
+	{ value: "songs", label: "Songs" },
+	{ value: "albums", label: "Albums" },
+	{ value: "artists", label: "Artists" },
+	{ value: "users", label: "Users" },
 ];
 
 const LandingPage = () => {
-  const navigate = useNavigate();
-  const { play, currentSong } = usePlayer();
-  const { user } = useAuth();
-  const [songs, setSongs] = useState<Song[]>([]);
-  const [loading, setLoading] = useState<boolean>(true);
-
-  const [searchInput, setSearchInput] = useState("");
-  const [activeQuery, setActiveQuery] = useState("");
-  const [searchCategory, setSearchCategory] = useState<SearchCategory>("songs");
-  const [searchResults, setSearchResults] = useState<unknown[]>([]);
-  const [searchLoading, setSearchLoading] = useState(false);
-  const [hasSearched, setHasSearched] = useState(false);
-
-  const [openPlaylistDropdown, setOpenPlaylistDropdown] = useState<
-    number | null
-  >(null);
-
-  useEffect(() => {
-    const fetchSongs = async () => {
-      try {
-        const response = await axiosInstance.get("/songs/top");
-        setSongs(response.data);
-      } catch (error) {
-        console.error("Error fetching songs:", error);
-      } finally {
-        setLoading(false);
-      }
-    };
-    fetchSongs();
-  }, []);
-
-  const toggleLike = async (songId: number) => {
-    try {
-      await axiosInstance.post(`/musical-entity/${songId}/like`);
-      setSongs((prevSongs) =>
-        prevSongs.map((song) =>
-          song.id === songId
-            ? { ...song, isLikedByCurrentUser: !song.isLikedByCurrentUser }
-            : song,
-        ),
-      );
-    } catch (error) {
-      console.error("Error toggling like:", error);
-    }
-  };
-
-  const togglePlaylistDropdown = (songId: number) => {
-    if (openPlaylistDropdown === songId) {
-      setOpenPlaylistDropdown(null);
-    } else {
-      setOpenPlaylistDropdown(songId);
-    }
-  };
-
-  const performSearch = async (query: string, category: SearchCategory) => {
-    if (!query.trim()) return;
-
-    setSearchLoading(true);
-    setHasSearched(true);
-    setActiveQuery(query);
-    setSearchCategory(category);
-
-    try {
-      let endpoint = "";
-      switch (category) {
-        case "songs":
-          endpoint = `/songs/search?q=${encodeURIComponent(query)}`;
-          break;
-        case "albums":
-          endpoint = `/albums/search?q=${encodeURIComponent(query)}`;
-          break;
-        case "artists":
-          endpoint = `/users/search?type=ARTIST&q=${encodeURIComponent(query)}`;
-          break;
-        case "users":
-          endpoint = `/users/search?type=LISTENER&q=${encodeURIComponent(query)}`;
-          break;
-      }
-
-      const response = await axiosInstance.get(endpoint);
-      setSearchResults(response.data);
-    } catch (error) {
-      console.error("Search error:", error);
-      setSearchResults([]);
-    } finally {
-      setSearchLoading(false);
-    }
-  };
-
-  const handleSearch = () => {
-    performSearch(searchInput, searchCategory);
-  };
-
-  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
-    if (e.key === "Enter") {
-      handleSearch();
-    }
-  };
-
-  const handleCategorySwitch = (category: SearchCategory) => {
-    performSearch(activeQuery, category);
-  };
-
-  const clearSearch = () => {
-    setSearchInput("");
-    setActiveQuery("");
-    setHasSearched(false);
-    setSearchResults([]);
-  };
-
-  const renderResults = () => {
-    if (searchLoading) {
-      return (
-        <div className="flex justify-center py-12">
-          <div className="w-10 h-10 border-4 border-white/10 border-t-[#1db954] rounded-full animate-spin"></div>
-        </div>
-      );
-    }
-
-    if (searchResults.length === 0) {
-      return (
-        <div className="text-center py-12 text-gray-400">
-          <p className="text-lg">
-            No {searchCategory} found for "{activeQuery}"
-          </p>
-        </div>
-      );
-    }
-
-    return (
-      <div className="divide-y divide-white/5">
-        {searchResults.map((result, index) => {
-          switch (searchCategory) {
-            case "songs":
-              return (
-                <SongResult key={(result as Song).id} song={result as Song} />
-              );
-            case "albums":
-              return (
-                <AlbumResult
-                  key={(result as Album).id}
-                  album={result as Album}
-                />
-              );
-            case "artists":
-              return (
-                <UserResult
-                  key={(result as BaseNonAdminUser).username ?? index}
-                  user={result as BaseNonAdminUser}
-                  label="Artist"
-                />
-              );
-            case "users":
-              return (
-                <UserResult
-                  key={(result as BaseNonAdminUser).username ?? index}
-                  user={result as BaseNonAdminUser}
-                  label="User"
-                />
-              );
-          }
-        })}
-      </div>
-    );
-  };
-
-  return (
-    <div className="min-h-screen bg-linear-to-br from-[#1e1e2e] to-[#0f0f1e] text-white flex">
-      <div className="flex-1">
-        <div className="p-8">
-          <div className="max-w-7xl mx-auto">
-            {/* Search Bar */}
-            <div className="mb-8 flex flex-col md:flex-row gap-3">
-              <div className="flex flex-1 gap-0">
-                {/* Category Dropdown */}
-                <select
-                  value={searchCategory}
-                  onChange={(e) =>
-                    setSearchCategory(e.target.value as SearchCategory)
-                  }
-                  className="bg-[#282828] border border-white/10 border-r-0 rounded-l-full py-2 px-4 text-white text-sm focus:outline-none focus:border-[#1db954] appearance-none cursor-pointer"
-                >
-                  {CATEGORIES.map((cat) => (
-                    <option key={cat.value} value={cat.value}>
-                      {cat.label}
-                    </option>
-                  ))}
-                </select>
-
-                {/* Search Input */}
-                <input
-                  type="text"
-                  placeholder={`Search ${searchCategory}...`}
-                  value={searchInput}
-                  onChange={(e) => setSearchInput(e.target.value)}
-                  onKeyDown={handleKeyDown}
-                  className="flex-1 bg-[#282828] border border-white/10 border-r-0 py-2 px-4 text-white focus:outline-none focus:border-[#1db954] focus:ring-1 focus:ring-[#1db954] transition-all"
-                />
-
-                {/* Search Button */}
-                <button
-                  onClick={handleSearch}
-                  className="bg-[#1db954] hover:bg-[#1ed760] text-black font-medium px-6 rounded-r-full transition-colors flex items-center gap-2"
-                >
-                  <svg
-                    className="w-5 h-5"
-                    fill="none"
-                    stroke="currentColor"
-                    viewBox="0 0 24 24"
-                  >
-                    <path
-                      strokeLinecap="round"
-                      strokeLinejoin="round"
-                      strokeWidth={2}
-                      d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
-                    />
-                  </svg>
-                  <span className="hidden sm:inline">Search</span>
-                </button>
-              </div>
-            </div>
-
-            {/* Search Results Section */}
-            {hasSearched ? (
-              <div>
-                <div className="flex items-center justify-between mb-4">
-                  <h2 className="text-2xl font-bold text-white">
-                    Results for "{activeQuery}"
-                  </h2>
-                  <button
-                    onClick={clearSearch}
-                    className="text-sm text-gray-400 hover:text-white transition-colors"
-                  >
-                    Clear search
-                  </button>
-                </div>
-
-                {/* Quick category switch buttons */}
-                <div className="flex gap-2 mb-6">
-                  {CATEGORIES.map((cat) => (
-                    <button
-                      key={cat.value}
-                      onClick={() => handleCategorySwitch(cat.value)}
-                      className={`px-4 py-1.5 rounded-full text-sm font-medium transition-colors cursor-pointer ${
-                        searchCategory === cat.value
-                          ? "bg-[#1db954] text-black"
-                          : "bg-white/10 text-white hover:bg-white/20"
-                      }`}
-                    >
-                      {cat.label}
-                    </button>
-                  ))}
-                </div>
-
-                {/* Results list */}
-                <div className="bg-[#1a1a2e]/50 rounded-xl overflow-hidden">
-                  {renderResults()}
-                </div>
-              </div>
-            ) : (
-              /* Default song grid */
-              <>
-                <div className="mb-8 border-b border-white/10 pb-6">
-                  <h1 className="text-5xl font-bold mb-3 pb-1 bg-linear-to-r from-[#1db954] to-[#1ed760] bg-clip-text text-transparent">
-                    Top Songs
-                  </h1>
-                  <p className="text-xl text-gray-400">
-                    Listen to the newest tracks on FinkWave
-                  </p>
-                </div>
-
-                {loading ? (
-                  <div className="flex flex-col items-center justify-center min-h-[40vh] gap-6">
-                    <div className="w-12 h-12 border-4 border-white/10 border-t-[#1db954] rounded-full animate-spin"></div>
-                    <p className="text-xl text-gray-400">Loading songs...</p>
-                  </div>
-                ) : (
-                  <div className="grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-8 py-4">
-                    {songs.map((song) => (
-                      <div
-                        key={song.id}
-                        onClick={() => navigate(`/songs/${song.id}`)}
-                        onMouseEnter={() => {
-                          if (
-                            openPlaylistDropdown !== null &&
-                            openPlaylistDropdown !== song.id
-                          ) {
-                            setOpenPlaylistDropdown(null);
-                          }
-                        }}
-                        className="bg-[#282828] rounded-xl cursor-pointer shadow-lg transition-all duration-300 ease-in-out hover:-translate-y-2 hover:shadow-2xl group relative"
-                      >
-                        <div className="relative w-full pt-[100%] overflow-hidden bg-[#181818] rounded-t-xl">
-                          <img
-                            src={
-                              song.cover
-                                ? `${baseURL}/${song.cover}`
-                                : "/favicon.png"
-                            }
-                            alt={song.title}
-                            className="absolute top-0 left-0 w-full h-full object-cover"
-                            onError={(e) => {
-                              (e.target as HTMLImageElement).src =
-                                "/favicon.png";
-                            }}
-                          />
-                          <div className="absolute top-0 left-0 w-full h-full bg-black/60 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300">
-                            {song.link ? (
-                              <button
-                                onClick={(e) => {
-                                  e.stopPropagation();
-                                  play({
-                                    id: song.id,
-                                    title: song.title,
-                                    artist: song.releasedBy,
-                                    cover: song.cover,
-                                    embedUrl: toEmbedUrl(song.link!),
-                                  });
-                                }}
-                                className={`w-14 h-14 rounded-full flex items-center justify-center text-xl shadow-[0_4px_12px_rgba(29,185,84,0.5)] transition-all cursor-pointer ${
-                                  currentSong?.id === song.id
-                                    ? "bg-white text-[#1db954]"
-                                    : "bg-[#1db954] text-black hover:scale-105"
-                                }`}
-                                aria-label={
-                                  currentSong?.id === song.id
-                                    ? "Now playing"
-                                    : "Play song"
-                                }
-                              >
-                                {currentSong?.id === song.id ? (
-                                  <svg
-                                    className="w-6 h-6"
-                                    fill="currentColor"
-                                    viewBox="0 0 24 24"
-                                  >
-                                    <path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z" />
-                                  </svg>
-                                ) : (
-                                  <svg
-                                    className="w-6 h-6"
-                                    fill="currentColor"
-                                    viewBox="0 0 24 24"
-                                  >
-                                    <path d="M8 5v14l11-7z" />
-                                  </svg>
-                                )}
-                              </button>
-                            ) : (
-                              <div className="w-14 h-14 rounded-full bg-[#1db954] flex items-center justify-center text-xl text-black shadow-[0_4px_12px_rgba(29,185,84,0.5)]">
-                                ▶
-                              </div>
-                            )}
-                          </div>
-                        </div>
-                        <div className="p-4">
-                          <h3 className="text-lg font-semibold mb-2 text-white overflow-hidden text-ellipsis whitespace-nowrap">
-                            {song.title}
-                          </h3>
-                          {song.album && (
-                            <p
-                              onClick={(e) => {
-                                e.stopPropagation();
-                                if (song.albumId) {
-                                  navigate(`/collection/album/${song.albumId}`);
-                                }
-                              }}
-                              className={`text-sm text-gray-400 mb-3 overflow-hidden text-ellipsis whitespace-nowrap ${
-                                song.albumId
-                                  ? "hover:underline cursor-pointer hover:text-white"
-                                  : ""
-                              }`}
-                            >
-                              {song.album}
-                            </p>
-                          )}
-                          <p
-                            onClick={(e) => {
-                              e.stopPropagation();
-                              if (song.artistUsername) {
-                                navigate(`/users/${song.artistUsername}`);
-                              }
-                            }}
-                            className={`text-sm text-gray-400 mb-3 overflow-hidden text-ellipsis whitespace-nowrap ${
-                              song.artistUsername
-                                ? "hover:underline cursor-pointer hover:text-white"
-                                : ""
-                            }`}
-                          >
-                            {song.releasedBy}
-                          </p>
-                          {user && (
-                            <div className="flex items-center justify-between mt-4 pt-3 border-t border-white/10">
-                              {/* Like button */}
-                              <button
-                                onClick={(e) => {
-                                  e.stopPropagation();
-                                  toggleLike(song.id);
-                                }}
-                                className="text-gray-400 hover:text-[#1db954] transition-colors cursor-pointer"
-                                aria-label={
-                                  song.isLikedByCurrentUser
-                                    ? "Unlike song"
-                                    : "Like song"
-                                }
-                              >
-                                {song.isLikedByCurrentUser ? (
-                                  <svg
-                                    className="w-6 h-6 fill-[#1db954]"
-                                    viewBox="0 0 24 24"
-                                  >
-                                    <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
-                                  </svg>
-                                ) : (
-                                  <svg
-                                    className="w-6 h-6"
-                                    fill="none"
-                                    stroke="currentColor"
-                                    viewBox="0 0 24 24"
-                                  >
-                                    <path
-                                      strokeLinecap="round"
-                                      strokeLinejoin="round"
-                                      strokeWidth={2}
-                                      d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"
-                                    />
-                                  </svg>
-                                )}
-                              </button>
-
-                              {/* Add to playlist button */}
-                              <div className="relative">
-                                <button
-                                  onClick={(e) => {
-                                    e.stopPropagation();
-                                    togglePlaylistDropdown(song.id);
-                                  }}
-                                  className="text-gray-400 hover:text-[#1db954] transition-colors cursor-pointer"
-                                  aria-label="Add to playlist"
-                                >
-                                  <svg
-                                    className="w-6 h-6"
-                                    fill="none"
-                                    stroke="currentColor"
-                                    viewBox="0 0 24 24"
-                                  >
-                                    <path
-                                      strokeLinecap="round"
-                                      strokeLinejoin="round"
-                                      strokeWidth={2}
-                                      d="M12 4v16m8-8H4"
-                                    />
-                                  </svg>
-                                </button>
-
-                                <PlaylistDropdown
-                                  songId={song.id}
-                                  isOpen={openPlaylistDropdown === song.id}
-                                  onClose={() => setOpenPlaylistDropdown(null)}
-                                  direction="above"
-                                />
-                              </div>
-                            </div>
-                          )}
-                        </div>
-                      </div>
-                    ))}
-                  </div>
-                )}
-              </>
-            )}
-          </div>
-        </div>
-      </div>
-    </div>
-  );
+	const navigate = useNavigate();
+	const { play, currentSong } = usePlayer();
+	const { user } = useAuth();
+	const [songs, setSongs] = useState<Song[]>([]);
+	const [loading, setLoading] = useState<boolean>(true);
+
+	const [searchInput, setSearchInput] = useState("");
+	const [activeQuery, setActiveQuery] = useState("");
+	const [searchCategory, setSearchCategory] = useState<SearchCategory>("songs");
+	const [searchResults, setSearchResults] = useState<unknown[]>([]);
+	const [searchLoading, setSearchLoading] = useState(false);
+	const [hasSearched, setHasSearched] = useState(false);
+
+	const [openPlaylistDropdown, setOpenPlaylistDropdown] = useState<
+		number | null
+	>(null);
+
+	useEffect(() => {
+		const fetchSongs = async () => {
+			try {
+				const response = await axiosInstance.get("/songs/top");
+				setSongs(response.data);
+			} catch (error) {
+				console.error("Error fetching songs:", error);
+			} finally {
+				setLoading(false);
+			}
+		};
+		fetchSongs();
+	}, []);
+
+	const toggleLike = async (songId: number) => {
+		try {
+			await axiosInstance.post(`/musical-entity/${songId}/like`);
+			setSongs((prevSongs) =>
+				prevSongs.map((song) =>
+					song.id === songId
+						? { ...song, isLikedByCurrentUser: !song.isLikedByCurrentUser }
+						: song,
+				),
+			);
+		} catch (error) {
+			console.error("Error toggling like:", error);
+		}
+	};
+
+	const togglePlaylistDropdown = (songId: number) => {
+		if (openPlaylistDropdown === songId) {
+			setOpenPlaylistDropdown(null);
+		} else {
+			setOpenPlaylistDropdown(songId);
+		}
+	};
+
+	const performSearch = async (query: string, category: SearchCategory) => {
+		if (!query.trim()) return;
+
+		setSearchLoading(true);
+		setHasSearched(true);
+		setActiveQuery(query);
+		setSearchCategory(category);
+
+		try {
+			let endpoint = "";
+			switch (category) {
+				case "songs":
+					endpoint = `/songs/search?q=${encodeURIComponent(query)}`;
+					break;
+				case "albums":
+					endpoint = `/albums/search?q=${encodeURIComponent(query)}`;
+					break;
+				case "artists":
+					endpoint = `/users/search?type=ARTIST&q=${encodeURIComponent(query)}`;
+					break;
+				case "users":
+					endpoint = `/users/search?type=LISTENER&q=${encodeURIComponent(query)}`;
+					break;
+			}
+
+			const response = await axiosInstance.get(endpoint);
+			setSearchResults(response.data);
+		} catch (error) {
+			console.error("Search error:", error);
+			setSearchResults([]);
+		} finally {
+			setSearchLoading(false);
+		}
+	};
+
+	const handleSearch = () => {
+		performSearch(searchInput, searchCategory);
+	};
+
+	const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
+		if (e.key === "Enter") {
+			handleSearch();
+		}
+	};
+
+	const handleCategorySwitch = (category: SearchCategory) => {
+		performSearch(activeQuery, category);
+	};
+
+	const clearSearch = () => {
+		setSearchInput("");
+		setActiveQuery("");
+		setHasSearched(false);
+		setSearchResults([]);
+	};
+
+	const renderResults = () => {
+		if (searchLoading) {
+			return (
+				<div className="flex justify-center py-12">
+					<div className="w-10 h-10 border-4 border-white/10 border-t-[#1db954] rounded-full animate-spin"></div>
+				</div>
+			);
+		}
+
+		if (searchResults.length === 0) {
+			return (
+				<div className="text-center py-12 text-gray-400">
+					<p className="text-lg">
+						No {searchCategory} found for "{activeQuery}"
+					</p>
+				</div>
+			);
+		}
+
+		return (
+			<div className="divide-y divide-white/5">
+				{searchResults.map((result, index) => {
+					switch (searchCategory) {
+						case "songs":
+							return (
+								<SongResult key={(result as Song).id} song={result as Song} />
+							);
+						case "albums":
+							return (
+								<AlbumResult
+									key={(result as Album).id}
+									album={result as Album}
+								/>
+							);
+						case "artists":
+							return (
+								<UserResult
+									key={(result as BaseNonAdminUser).username ?? index}
+									user={result as BaseNonAdminUser}
+									label="Artist"
+								/>
+							);
+						case "users":
+							return (
+								<UserResult
+									key={(result as BaseNonAdminUser).username ?? index}
+									user={result as BaseNonAdminUser}
+									label="User"
+								/>
+							);
+					}
+				})}
+			</div>
+		);
+	};
+
+	return (
+		<div className="min-h-screen bg-linear-to-br from-[#1e1e2e] to-[#0f0f1e] text-white flex">
+			<div className="flex-1">
+				<div className="p-8">
+					<div className="max-w-7xl mx-auto">
+						{/* Search Bar */}
+						<div className="mb-8 flex flex-col md:flex-row gap-3">
+							<div className="flex flex-1 gap-0">
+								{/* Category Dropdown */}
+								<select
+									value={searchCategory}
+									onChange={(e) =>
+										setSearchCategory(e.target.value as SearchCategory)
+									}
+									className="bg-[#282828] border border-white/10 border-r-0 rounded-l-full py-2 px-4 text-white text-sm focus:outline-none focus:border-[#1db954] appearance-none cursor-pointer"
+								>
+									{CATEGORIES.map((cat) => (
+										<option key={cat.value} value={cat.value}>
+											{cat.label}
+										</option>
+									))}
+								</select>
+
+								{/* Search Input */}
+								<input
+									type="text"
+									placeholder={`Search ${searchCategory}...`}
+									value={searchInput}
+									onChange={(e) => setSearchInput(e.target.value)}
+									onKeyDown={handleKeyDown}
+									className="flex-1 bg-[#282828] border border-white/10 border-r-0 py-2 px-4 text-white focus:outline-none focus:border-[#1db954] focus:ring-1 focus:ring-[#1db954] transition-all"
+								/>
+
+								{/* Search Button */}
+								<button
+									onClick={handleSearch}
+									className="bg-[#1db954] hover:bg-[#1ed760] text-black font-medium px-6 rounded-r-full transition-colors flex items-center gap-2 cursor-pointer"
+								>
+									<svg
+										className="w-5 h-5"
+										fill="none"
+										stroke="currentColor"
+										viewBox="0 0 24 24"
+									>
+										<path
+											strokeLinecap="round"
+											strokeLinejoin="round"
+											strokeWidth={2}
+											d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
+										/>
+									</svg>
+									<span className="hidden sm:inline">Search</span>
+								</button>
+							</div>
+						</div>
+
+						{/* Search Results Section */}
+						{hasSearched ? (
+							<div>
+								<div className="flex items-center justify-between mb-4">
+									<h2 className="text-2xl font-bold text-white">
+										Results for "{activeQuery}"
+									</h2>
+									<button
+										onClick={clearSearch}
+										className="text-sm text-gray-400 hover:text-white transition-colors"
+									>
+										Clear search
+									</button>
+								</div>
+
+								{/* Quick category switch buttons */}
+								<div className="flex gap-2 mb-6">
+									{CATEGORIES.map((cat) => (
+										<button
+											key={cat.value}
+											onClick={() => handleCategorySwitch(cat.value)}
+											className={`px-4 py-1.5 rounded-full text-sm font-medium transition-colors cursor-pointer ${
+												searchCategory === cat.value
+													? "bg-[#1db954] text-black"
+													: "bg-white/10 text-white hover:bg-white/20"
+											}`}
+										>
+											{cat.label}
+										</button>
+									))}
+								</div>
+
+								{/* Results list */}
+								<div className="bg-[#1a1a2e]/50 rounded-xl overflow-hidden">
+									{renderResults()}
+								</div>
+							</div>
+						) : (
+							/* Default song grid */
+							<>
+								<div className="mb-8 border-b border-white/10 pb-6">
+									<h1 className="text-5xl font-bold mb-3 pb-1 bg-linear-to-r from-[#1db954] to-[#1ed760] bg-clip-text text-transparent">
+										Top Songs
+									</h1>
+									<p className="text-xl text-gray-400">
+										Listen to the newest tracks on FinkWave
+									</p>
+								</div>
+
+								{loading ? (
+									<div className="flex flex-col items-center justify-center min-h-[40vh] gap-6">
+										<div className="w-12 h-12 border-4 border-white/10 border-t-[#1db954] rounded-full animate-spin"></div>
+										<p className="text-xl text-gray-400">Loading songs...</p>
+									</div>
+								) : (
+									<div className="grid grid-cols-[repeat(auto-fill,minmax(220px,1fr))] gap-8 py-4">
+										{songs.map((song) => (
+											<div
+												key={song.id}
+												onClick={() => navigate(`/songs/${song.id}`)}
+												onMouseEnter={() => {
+													if (
+														openPlaylistDropdown !== null &&
+														openPlaylistDropdown !== song.id
+													) {
+														setOpenPlaylistDropdown(null);
+													}
+												}}
+												className="bg-[#282828] rounded-xl cursor-pointer shadow-lg transition-all duration-300 ease-in-out hover:-translate-y-2 hover:shadow-2xl group relative"
+											>
+												<div className="relative w-full pt-[100%] overflow-hidden bg-[#181818] rounded-t-xl">
+													<img
+														src={
+															song.cover
+																? `${baseURL}/${song.cover}`
+																: "/favicon.png"
+														}
+														alt={song.title}
+														className="absolute top-0 left-0 w-full h-full object-cover"
+														onError={(e) => {
+															(e.target as HTMLImageElement).src =
+																"/favicon.png";
+														}}
+													/>
+													<div className="absolute top-0 left-0 w-full h-full bg-black/60 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300">
+														{song.link ? (
+															<button
+																onClick={(e) => {
+																	e.stopPropagation();
+																	play({
+																		id: song.id,
+																		title: song.title,
+																		artist: song.releasedBy,
+																		cover: song.cover,
+																		embedUrl: toEmbedUrl(song.link!),
+																	});
+																}}
+																className={`w-14 h-14 rounded-full flex items-center justify-center text-xl shadow-[0_4px_12px_rgba(29,185,84,0.5)] transition-all cursor-pointer ${
+																	currentSong?.id === song.id
+																		? "bg-white text-[#1db954]"
+																		: "bg-[#1db954] text-black hover:scale-105"
+																}`}
+																aria-label={
+																	currentSong?.id === song.id
+																		? "Now playing"
+																		: "Play song"
+																}
+															>
+																{currentSong?.id === song.id ? (
+																	<svg
+																		className="w-6 h-6"
+																		fill="currentColor"
+																		viewBox="0 0 24 24"
+																	>
+																		<path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z" />
+																	</svg>
+																) : (
+																	<svg
+																		className="w-6 h-6"
+																		fill="currentColor"
+																		viewBox="0 0 24 24"
+																	>
+																		<path d="M8 5v14l11-7z" />
+																	</svg>
+																)}
+															</button>
+														) : (
+															<div className="w-14 h-14 rounded-full bg-[#1db954] flex items-center justify-center text-xl text-black shadow-[0_4px_12px_rgba(29,185,84,0.5)]">
+																▶
+															</div>
+														)}
+													</div>
+												</div>
+												<div className="p-4">
+													<h3 className="text-lg font-semibold mb-2 text-white overflow-hidden text-ellipsis whitespace-nowrap">
+														{song.title}
+													</h3>
+													{song.album && (
+														<p
+															onClick={(e) => {
+																e.stopPropagation();
+																if (song.albumId) {
+																	navigate(`/collection/album/${song.albumId}`);
+																}
+															}}
+															className={`text-sm text-gray-400 mb-3 overflow-hidden text-ellipsis whitespace-nowrap ${
+																song.albumId
+																	? "hover:underline cursor-pointer hover:text-white"
+																	: ""
+															}`}
+														>
+															{song.album}
+														</p>
+													)}
+													<p
+														onClick={(e) => {
+															e.stopPropagation();
+															if (song.artistUsername) {
+																navigate(`/users/${song.artistUsername}`);
+															}
+														}}
+														className={`text-sm text-gray-400 mb-3 overflow-hidden text-ellipsis whitespace-nowrap ${
+															song.artistUsername
+																? "hover:underline cursor-pointer hover:text-white"
+																: ""
+														}`}
+													>
+														{song.releasedBy}
+													</p>
+													{user && (
+														<div className="flex items-center justify-between mt-4 pt-3 border-t border-white/10">
+															{/* Like button */}
+															<button
+																onClick={(e) => {
+																	e.stopPropagation();
+																	toggleLike(song.id);
+																}}
+																className="text-gray-400 hover:text-[#1db954] transition-colors cursor-pointer"
+																aria-label={
+																	song.isLikedByCurrentUser
+																		? "Unlike song"
+																		: "Like song"
+																}
+															>
+																{song.isLikedByCurrentUser ? (
+																	<svg
+																		className="w-6 h-6 fill-[#1db954]"
+																		viewBox="0 0 24 24"
+																	>
+																		<path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
+																	</svg>
+																) : (
+																	<svg
+																		className="w-6 h-6"
+																		fill="none"
+																		stroke="currentColor"
+																		viewBox="0 0 24 24"
+																	>
+																		<path
+																			strokeLinecap="round"
+																			strokeLinejoin="round"
+																			strokeWidth={2}
+																			d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"
+																		/>
+																	</svg>
+																)}
+															</button>
+
+															{/* Add to playlist button */}
+															<div className="relative">
+																<button
+																	onClick={(e) => {
+																		e.stopPropagation();
+																		togglePlaylistDropdown(song.id);
+																	}}
+																	className="text-gray-400 hover:text-[#1db954] transition-colors cursor-pointer"
+																	aria-label="Add to playlist"
+																>
+																	<svg
+																		className="w-6 h-6"
+																		fill="none"
+																		stroke="currentColor"
+																		viewBox="0 0 24 24"
+																	>
+																		<path
+																			strokeLinecap="round"
+																			strokeLinejoin="round"
+																			strokeWidth={2}
+																			d="M12 4v16m8-8H4"
+																		/>
+																	</svg>
+																</button>
+
+																<PlaylistDropdown
+																	songId={song.id}
+																	isOpen={openPlaylistDropdown === song.id}
+																	onClose={() => setOpenPlaylistDropdown(null)}
+																	direction="above"
+																/>
+															</div>
+														</div>
+													)}
+												</div>
+											</div>
+										))}
+									</div>
+								)}
+							</>
+						)}
+					</div>
+				</div>
+			</div>
+		</div>
+	);
 };
 
Index: frontend/src/pages/Nav.tsx
===================================================================
--- frontend/src/pages/Nav.tsx	(revision 765e166b79bd65b570078fd2d0b5b84754b04258)
+++ frontend/src/pages/Nav.tsx	(revision 947fcaadc3ddb75ae7bee1ae398ae0f43c988c1e)
@@ -56,5 +56,5 @@
 					<button
 						onClick={onToggleSidebar}
-						className="text-white hover:text-[#1db954] transition-colors p-2"
+						className="text-white hover:text-[#1db954] transition-colors p-2 cursor-pointer"
 						aria-label="Toggle sidebar"
 					>
Index: frontend/src/pages/SongDetail.tsx
===================================================================
--- frontend/src/pages/SongDetail.tsx	(revision 765e166b79bd65b570078fd2d0b5b84754b04258)
+++ frontend/src/pages/SongDetail.tsx	(revision 947fcaadc3ddb75ae7bee1ae398ae0f43c988c1e)
@@ -10,585 +10,585 @@
 
 const ROLE_LABELS: Record<string, string> = {
-  MAIN_VOCAL: "Main Vocal",
-  FEATURED: "Featured",
-  PRODUCER: "Producer",
-  SONGWRITER: "Songwriter",
-  COMPOSER: "Composer",
-  MIXER: "Mixer",
-  ENGINEER: "Engineer",
+	MAIN_VOCAL: "Main Vocal",
+	FEATURED: "Featured",
+	PRODUCER: "Producer",
+	SONGWRITER: "Songwriter",
+	COMPOSER: "Composer",
+	MIXER: "Mixer",
+	ENGINEER: "Engineer",
 };
 
 const formatRole = (role: string): string => {
-  return ROLE_LABELS[role] || role.replace(/_/g, " ");
+	return ROLE_LABELS[role] || role.replace(/_/g, " ");
 };
 
 const renderStars = (grade: number) => {
-  return (
-    <div className="flex gap-0.5">
-      {[1, 2, 3, 4, 5].map((star) => (
-        <svg
-          key={star}
-          className={`w-4 h-4 ${star <= grade ? "text-yellow-400" : "text-gray-600"}`}
-          fill="currentColor"
-          viewBox="0 0 20 20"
-        >
-          <path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
-        </svg>
-      ))}
-    </div>
-  );
+	return (
+		<div className="flex gap-0.5">
+			{[1, 2, 3, 4, 5].map((star) => (
+				<svg
+					key={star}
+					className={`w-4 h-4 ${star <= grade ? "text-yellow-400" : "text-gray-600"}`}
+					fill="currentColor"
+					viewBox="0 0 20 20"
+				>
+					<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
+				</svg>
+			))}
+		</div>
+	);
 };
 
 const SongDetail = () => {
-  const { id } = useParams<{ id: string }>();
-  const { user } = useAuth();
-  const { play, currentSong } = usePlayer();
-  const [song, setSong] = useState<SongDetailType | null>(null);
-  const [loading, setLoading] = useState(true);
-  const [error, setError] = useState<string | null>(null);
-  const [showReviewModal, setShowReviewModal] = useState(false);
-  const [reviewRating, setReviewRating] = useState(0);
-  const [reviewComment, setReviewComment] = useState("");
-  const [hoverRating, setHoverRating] = useState(0);
-  const [showPlaylistDropdown, setShowPlaylistDropdown] = useState(false);
-  console.log(user);
-  useEffect(() => {
-    const fetchSong = async () => {
-      try {
-        setLoading(true);
-        const response = await axiosInstance.get(`/songs/${id}/details`);
-        setSong(response.data);
-      } catch (err) {
-        console.error("Error fetching song details:", err);
-        setError("Failed to load song details.");
-      } finally {
-        setLoading(false);
-      }
-    };
-    if (id) fetchSong();
-  }, [id]);
-
-  const handleSubmitReview = async () => {
-    if (reviewRating === 0) {
-      // todo: replace with toast
-      alert("Please select a rating");
-      return;
-    }
-    try {
-      await axiosInstance.post(`reviews/${song?.id}`, {
-        grade: reviewRating,
-        comment: reviewComment,
-      });
-      const response = await axiosInstance.get(`/songs/${id}/details`);
-      setSong(response.data);
-    } catch (err) {
-      // todo: replace with toast
-      console.error("Error submitting review:", err);
-    } finally {
-      setShowReviewModal(false);
-      setReviewRating(0);
-      setReviewComment("");
-      setHoverRating(0);
-    }
-  };
-
-  const deleteReview = async () => {
-    try {
-      await axiosInstance.delete(`reviews/${song?.id}`);
-      const response = await axiosInstance.get(`/songs/${id}/details`);
-      setSong(response.data);
-    } catch (err) {
-      toast.error("Failed to delete review");
-      console.error("Error deleting review:", err);
-    }
-  };
-
-  const toggleLike = async () => {
-    if (!song) return;
-    try {
-      await axiosInstance.post(`/musical-entity/${song.id}/like`);
-      setSong((prev) =>
-        prev
-          ? { ...prev, isLikedByCurrentUser: !prev.isLikedByCurrentUser }
-          : prev,
-      );
-    } catch (err) {
-      toast.error("Failed to toggle like");
-      console.error("Error toggling like:", err);
-    }
-  };
-
-  if (loading) {
-    return (
-      <div className="min-h-screen bg-linear-to-br from-[#1e1e2e] to-[#0f0f1e] flex items-center justify-center">
-        <div className="flex flex-col items-center gap-4">
-          <div className="w-12 h-12 border-4 border-white/10 border-t-[#1db954] rounded-full animate-spin" />
-          <p className="text-gray-400 text-lg">Loading song…</p>
-        </div>
-      </div>
-    );
-  }
-
-  if (error || !song) {
-    return (
-      <div className="min-h-screen bg-linear-to-br from-[#1e1e2e] to-[#0f0f1e] flex items-center justify-center">
-        <div className="text-center">
-          <p className="text-red-400 text-xl mb-4">
-            {error ?? "Song not found"}
-          </p>
-          <Link to="/" className="text-[#1db954] hover:underline text-sm">
-            ← Back to Home
-          </Link>
-        </div>
-      </div>
-    );
-  }
-
-  const otherContributors = song.contributions.filter(
-    (c) => c.artistName !== song.releasedBy,
-  );
-
-  const avgRating =
-    song.reviews.length > 0
-      ? (
-          song.reviews.reduce((sum, r) => sum + r.grade, 0) /
-          song.reviews.length
-        ).toFixed(1)
-      : null;
-
-  return (
-    <div className="min-h-screen bg-linear-to-br from-[#1e1e2e] to-[#0f0f1e] text-white">
-      <div className="max-w-5xl mx-auto px-6 py-10">
-        {/* Back link */}
-        <Link
-          to="/"
-          className="inline-flex items-center gap-1 text-gray-400 hover:text-white text-sm mb-8 transition-colors"
-        >
-          <svg
-            className="w-4 h-4"
-            fill="none"
-            stroke="currentColor"
-            viewBox="0 0 24 24"
-          >
-            <path
-              strokeLinecap="round"
-              strokeLinejoin="round"
-              strokeWidth={2}
-              d="M15 19l-7-7 7-7"
-            />
-          </svg>
-          Back to Home
-        </Link>
-
-        {/* Hero section */}
-        <div className="flex flex-col md:flex-row gap-8 mb-10">
-          {/* Cover art */}
-          <div className="w-full md:w-72 shrink-0">
-            <div className="relative w-full pt-[100%] rounded-xl overflow-hidden shadow-2xl bg-[#181818]">
-              <img
-                src={song.cover ? `${baseURL}/${song.cover}` : "/favicon.png"}
-                alt={song.title}
-                className="absolute inset-0 w-full h-full object-cover"
-                onError={(e) => {
-                  (e.target as HTMLImageElement).src = "/favicon.png";
-                }}
-              />
-            </div>
-          </div>
-
-          {/* Song info */}
-          <div className="flex flex-col justify-end gap-3 min-w-0">
-            <span className="text-xs uppercase tracking-widest text-gray-400 font-medium">
-              {song.genre} • Song
-            </span>
-            <h1 className="text-4xl md:text-5xl font-extrabold leading-tight truncate">
-              {song.title}
-            </h1>
-
-            {/* Main artist */}
-            <p className="text-xl text-gray-300 font-semibold">
-              {song.releasedBy}
-            </p>
-
-            {/* Album */}
-            {song.album && (
-              <p className="text-sm text-gray-500">
-                Album: <span className="text-gray-300">{song.album}</span>
-              </p>
-            )}
-
-            {/* Rating summary */}
-            {avgRating && (
-              <div className="flex items-center gap-2 mt-1">
-                {renderStars(Math.round(Number(avgRating)))}
-                <span className="text-sm text-gray-400">
-                  {avgRating} · {song.reviews.length}{" "}
-                  {song.reviews.length === 1 ? "review" : "reviews"}
-                </span>
-              </div>
-            )}
-
-            {/* Action buttons */}
-            <div className="flex items-center gap-3 mt-4">
-              {/* Play button */}
-              {song.link && (
-                <button
-                  onClick={() =>
-                    play({
-                      id: song.id,
-                      title: song.title,
-                      artist: song.releasedBy,
-                      cover: song.cover,
-                      embedUrl: toEmbedUrl(song.link!),
-                    })
-                  }
-                  className={`flex items-center gap-2 px-6 py-3 rounded-full text-sm font-semibold transition-all cursor-pointer ${
-                    currentSong?.id === song.id
-                      ? "bg-white text-[#1db954]"
-                      : "bg-[#1db954] text-black hover:bg-[#1ed760] hover:scale-105"
-                  }`}
-                >
-                  {currentSong?.id === song.id ? (
-                    <>
-                      <svg
-                        className="w-5 h-5"
-                        fill="currentColor"
-                        viewBox="0 0 24 24"
-                      >
-                        <path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z" />
-                      </svg>
-                      Now Playing
-                    </>
-                  ) : (
-                    <>
-                      <svg
-                        className="w-5 h-5"
-                        fill="currentColor"
-                        viewBox="0 0 24 24"
-                      >
-                        <path d="M8 5v14l11-7z" />
-                      </svg>
-                      Play Song
-                    </>
-                  )}
-                </button>
-              )}
-
-              {user && (
-                <>
-                  <button
-                    onClick={toggleLike}
-                    className={`flex items-center gap-2 px-5 py-3 rounded-full text-sm font-semibold transition-colors cursor-pointer ${
-                      song.isLikedByCurrentUser
-                        ? "bg-[#1db954] text-black"
-                        : "bg-white/10 text-white hover:bg-white/20"
-                    }`}
-                  >
-                    {song.isLikedByCurrentUser ? (
-                      <svg
-                        className="w-5 h-5"
-                        fill="currentColor"
-                        viewBox="0 0 24 24"
-                      >
-                        <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
-                      </svg>
-                    ) : (
-                      <svg
-                        className="w-5 h-5"
-                        fill="none"
-                        stroke="currentColor"
-                        viewBox="0 0 24 24"
-                      >
-                        <path
-                          strokeLinecap="round"
-                          strokeLinejoin="round"
-                          strokeWidth={2}
-                          d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"
-                        />
-                      </svg>
-                    )}
-                    {song.isLikedByCurrentUser ? "Liked" : "Like"}
-                  </button>
-
-                  {/* Add to Playlist button */}
-                  <div className="relative">
-                    <button
-                      onClick={() => setShowPlaylistDropdown((prev) => !prev)}
-                      className="flex items-center gap-2 px-5 py-3 rounded-full text-sm font-semibold bg-white/10 text-white hover:bg-white/20 transition-colors cursor-pointer"
-                    >
-                      <svg
-                        className="w-5 h-5"
-                        fill="none"
-                        stroke="currentColor"
-                        viewBox="0 0 24 24"
-                      >
-                        <path
-                          strokeLinecap="round"
-                          strokeLinejoin="round"
-                          strokeWidth={2}
-                          d="M12 4v16m8-8H4"
-                        />
-                      </svg>
-                      Add to Playlist
-                    </button>
-
-                    <PlaylistDropdown
-                      songId={song.id}
-                      isOpen={showPlaylistDropdown}
-                      onClose={() => setShowPlaylistDropdown(false)}
-                      direction="below"
-                    />
-                  </div>
-                </>
-              )}
-            </div>
-          </div>
-        </div>
-
-        {/* Credits / Contributions */}
-        {song.contributions.length > 0 && (
-          <section className="mb-10">
-            <h2 className="text-2xl font-bold mb-4">Credits</h2>
-            <div className="bg-[#1a1a2e]/60 rounded-xl p-5 divide-y divide-white/5">
-              {/* Main artist first */}
-              {song.contributions
-                .filter((c) => c.artistName === song.releasedBy)
-                .map((c, i) => (
-                  <div
-                    key={`main-${i}`}
-                    className="flex items-center justify-between py-3 first:pt-0 last:pb-0"
-                  >
-                    <div className="flex items-center gap-3">
-                      <div className="w-10 h-10 bg-[#1db954] rounded-full flex items-center justify-center text-black font-bold text-sm">
-                        {c.artistName.charAt(0).toUpperCase()}
-                      </div>
-                      <div>
-                        <p className="text-white font-semibold text-lg">
-                          {c.artistName}
-                        </p>
-                      </div>
-                    </div>
-                    <span className="text-sm text-gray-400 bg-white/5 px-3 py-1 rounded-full">
-                      {formatRole(c.role)}
-                    </span>
-                  </div>
-                ))}
-
-              {/* Other contributors */}
-              {otherContributors.map((c, i) => (
-                <div
-                  key={`contrib-${i}`}
-                  className="flex items-center justify-between py-3 first:pt-0 last:pb-0"
-                >
-                  <div className="flex items-center gap-3">
-                    <div className="w-9 h-9 bg-white/10 rounded-full flex items-center justify-center text-white font-medium text-sm">
-                      {c.artistName.charAt(0).toUpperCase()}
-                    </div>
-                    <p className="text-gray-300 font-medium">{c.artistName}</p>
-                  </div>
-                  <span className="text-sm text-gray-500 bg-white/5 px-3 py-1 rounded-full">
-                    {formatRole(c.role)}
-                  </span>
-                </div>
-              ))}
-            </div>
-          </section>
-        )}
-
-        {/* Reviews */}
-        <section>
-          <div className="flex items-center justify-between mb-4">
-            <h2 className="text-2xl font-bold">
-              Reviews
-              {song.reviews.length > 0 && (
-                <span className="text-base font-normal text-gray-500 ml-2">
-                  ({song.reviews.length})
-                </span>
-              )}
-            </h2>
-            {user != null && (
-              <button
-                onClick={() => setShowReviewModal(true)}
-                className="flex items-center gap-2 bg-[#1db954] hover:bg-[#1ed760] text-black text-sm font-semibold px-4 py-2 rounded-full transition-colors"
-              >
-                <svg
-                  className="w-4 h-4"
-                  fill="none"
-                  stroke="currentColor"
-                  viewBox="0 0 24 24"
-                >
-                  <path
-                    strokeLinecap="round"
-                    strokeLinejoin="round"
-                    strokeWidth={2}
-                    d="M12 4v16m8-8H4"
-                  />
-                </svg>
-                Add Review
-              </button>
-            )}
-          </div>
-
-          {song.reviews.length === 0 ? (
-            <div className="bg-[#1a1a2e]/60 rounded-xl p-10 text-center">
-              <p className="text-gray-500 text-lg">No reviews yet.</p>
-              <p className="text-gray-600 text-sm mt-1">
-                Be the first to share your thoughts!
-              </p>
-            </div>
-          ) : (
-            <div className="space-y-4">
-              {song.reviews.map((review) => (
-                <div
-                  key={`${review.id.listenerId}-${review.id.musicalEntityId}`}
-                  className="bg-[#1a1a2e]/60 rounded-xl p-5 hover:bg-[#1a1a2e]/80 transition-colors"
-                >
-                  <div className="flex items-start justify-between mb-2">
-                    <div className="flex items-center gap-3">
-                      <div className="w-9 h-9 bg-blue-500/20 rounded-full flex items-center justify-center">
-                        <span className="text-blue-400 font-semibold text-sm">
-                          {review.author.charAt(0).toUpperCase()}
-                        </span>
-                      </div>
-                      <div>
-                        <p className="text-white font-medium">
-                          {review.author}
-                        </p>
-                        {renderStars(review.grade)}
-                      </div>
-                    </div>
-                    {user?.username === review.authorUsername && (
-                      <button
-                        onClick={deleteReview}
-                        className="text-gray-500 hover:text-red-400 transition-colors p-2 rounded-lg hover:bg-red-400/10"
-                        title="Delete review"
-                      >
-                        <svg
-                          className="w-5 h-5"
-                          fill="none"
-                          stroke="currentColor"
-                          viewBox="0 0 24 24"
-                        >
-                          <path
-                            strokeLinecap="round"
-                            strokeLinejoin="round"
-                            strokeWidth={2}
-                            d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"
-                          />
-                        </svg>
-                      </button>
-                    )}
-                  </div>
-                  <p className="text-gray-300 text-sm leading-relaxed mt-3 pl-12">
-                    {review.comment}
-                  </p>
-                </div>
-              ))}
-            </div>
-          )}
-        </section>
-      </div>
-
-      {/* Review Modal */}
-      {showReviewModal && (
-        <div className="fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/70 backdrop-blur-sm">
-          <div className="bg-[#1a1a2e] rounded-2xl p-6 max-w-md w-full shadow-2xl">
-            <div className="flex items-center justify-between mb-6">
-              <h3 className="text-2xl font-bold">Add Review</h3>
-              <button
-                onClick={() => {
-                  setShowReviewModal(false);
-                  setReviewRating(0);
-                  setReviewComment("");
-                  setHoverRating(0);
-                }}
-                className="text-gray-400 hover:text-white transition-colors"
-              >
-                <svg
-                  className="w-6 h-6"
-                  fill="none"
-                  stroke="currentColor"
-                  viewBox="0 0 24 24"
-                >
-                  <path
-                    strokeLinecap="round"
-                    strokeLinejoin="round"
-                    strokeWidth={2}
-                    d="M6 18L18 6M6 6l12 12"
-                  />
-                </svg>
-              </button>
-            </div>
-
-            {/* Star Rating */}
-            <div className="mb-6">
-              <label className="block text-sm font-medium mb-3">
-                Rating <span className="text-red-400">*</span>
-              </label>
-              <div className="flex gap-2">
-                {[1, 2, 3, 4, 5].map((star) => (
-                  <button
-                    key={star}
-                    onClick={() => setReviewRating(star)}
-                    onMouseEnter={() => setHoverRating(star)}
-                    onMouseLeave={() => setHoverRating(0)}
-                    className="transition-transform hover:scale-110"
-                  >
-                    <svg
-                      className={`w-10 h-10 ${
-                        star <= (hoverRating || reviewRating)
-                          ? "text-yellow-400"
-                          : "text-gray-600"
-                      }`}
-                      fill="currentColor"
-                      viewBox="0 0 20 20"
-                    >
-                      <path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
-                    </svg>
-                  </button>
-                ))}
-              </div>
-            </div>
-
-            {/* Comment */}
-            <div className="mb-6">
-              <label className="block text-sm font-medium mb-2">
-                Comment <span className="text-gray-500">(optional)</span>
-              </label>
-              <textarea
-                value={reviewComment}
-                onChange={(e) => setReviewComment(e.target.value)}
-                placeholder="Share your thoughts about this song..."
-                rows={4}
-                className="w-full bg-[#0f0f1e] border border-white/10 rounded-lg px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:border-[#1db954] transition-colors resize-none"
-              />
-            </div>
-
-            {/* Actions */}
-            <div className="flex gap-3 justify-end">
-              <button
-                onClick={() => {
-                  setShowReviewModal(false);
-                  setReviewRating(0);
-                  setReviewComment("");
-                  setHoverRating(0);
-                }}
-                className="px-5 py-2.5 rounded-full text-sm font-semibold bg-white/10 hover:bg-white/20 transition-colors"
-              >
-                Cancel
-              </button>
-              <button
-                onClick={handleSubmitReview}
-                disabled={reviewRating === 0}
-                className="px-5 py-2.5 rounded-full text-sm font-semibold bg-[#1db954] hover:bg-[#1ed760] text-black transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
-              >
-                Submit
-              </button>
-            </div>
-          </div>
-        </div>
-      )}
-    </div>
-  );
+	const { id } = useParams<{ id: string }>();
+	const { user } = useAuth();
+	const { play, currentSong } = usePlayer();
+	const [song, setSong] = useState<SongDetailType | null>(null);
+	const [loading, setLoading] = useState(true);
+	const [error, setError] = useState<string | null>(null);
+	const [showReviewModal, setShowReviewModal] = useState(false);
+	const [reviewRating, setReviewRating] = useState(0);
+	const [reviewComment, setReviewComment] = useState("");
+	const [hoverRating, setHoverRating] = useState(0);
+	const [showPlaylistDropdown, setShowPlaylistDropdown] = useState(false);
+	console.log(user);
+	useEffect(() => {
+		const fetchSong = async () => {
+			try {
+				setLoading(true);
+				const response = await axiosInstance.get(`/songs/${id}/details`);
+				setSong(response.data);
+			} catch (err) {
+				console.error("Error fetching song details:", err);
+				setError("Failed to load song details.");
+			} finally {
+				setLoading(false);
+			}
+		};
+		if (id) fetchSong();
+	}, [id]);
+
+	const handleSubmitReview = async () => {
+		if (reviewRating === 0) {
+			// todo: replace with toast
+			alert("Please select a rating");
+			return;
+		}
+		try {
+			await axiosInstance.post(`reviews/${song?.id}`, {
+				grade: reviewRating,
+				comment: reviewComment,
+			});
+			const response = await axiosInstance.get(`/songs/${id}/details`);
+			setSong(response.data);
+		} catch (err) {
+			// todo: replace with toast
+			console.error("Error submitting review:", err);
+		} finally {
+			setShowReviewModal(false);
+			setReviewRating(0);
+			setReviewComment("");
+			setHoverRating(0);
+		}
+	};
+
+	const deleteReview = async () => {
+		try {
+			await axiosInstance.delete(`reviews/${song?.id}`);
+			const response = await axiosInstance.get(`/songs/${id}/details`);
+			setSong(response.data);
+		} catch (err) {
+			toast.error("Failed to delete review");
+			console.error("Error deleting review:", err);
+		}
+	};
+
+	const toggleLike = async () => {
+		if (!song) return;
+		try {
+			await axiosInstance.post(`/musical-entity/${song.id}/like`);
+			setSong((prev) =>
+				prev
+					? { ...prev, isLikedByCurrentUser: !prev.isLikedByCurrentUser }
+					: prev,
+			);
+		} catch (err) {
+			toast.error("Failed to toggle like");
+			console.error("Error toggling like:", err);
+		}
+	};
+
+	if (loading) {
+		return (
+			<div className="min-h-screen bg-linear-to-br from-[#1e1e2e] to-[#0f0f1e] flex items-center justify-center">
+				<div className="flex flex-col items-center gap-4">
+					<div className="w-12 h-12 border-4 border-white/10 border-t-[#1db954] rounded-full animate-spin" />
+					<p className="text-gray-400 text-lg">Loading song…</p>
+				</div>
+			</div>
+		);
+	}
+
+	if (error || !song) {
+		return (
+			<div className="min-h-screen bg-linear-to-br from-[#1e1e2e] to-[#0f0f1e] flex items-center justify-center">
+				<div className="text-center">
+					<p className="text-red-400 text-xl mb-4">
+						{error ?? "Song not found"}
+					</p>
+					<Link to="/" className="text-[#1db954] hover:underline text-sm">
+						← Back to Home
+					</Link>
+				</div>
+			</div>
+		);
+	}
+
+	const otherContributors = song.contributions.filter(
+		(c) => c.artistName !== song.releasedBy,
+	);
+
+	const avgRating =
+		song.reviews.length > 0
+			? (
+					song.reviews.reduce((sum, r) => sum + r.grade, 0) /
+					song.reviews.length
+				).toFixed(1)
+			: null;
+
+	return (
+		<div className="min-h-screen bg-linear-to-br from-[#1e1e2e] to-[#0f0f1e] text-white">
+			<div className="max-w-5xl mx-auto px-6 py-10">
+				{/* Back link */}
+				<Link
+					to="/"
+					className="inline-flex items-center gap-1 text-gray-400 hover:text-white text-sm mb-8 transition-colors"
+				>
+					<svg
+						className="w-4 h-4"
+						fill="none"
+						stroke="currentColor"
+						viewBox="0 0 24 24"
+					>
+						<path
+							strokeLinecap="round"
+							strokeLinejoin="round"
+							strokeWidth={2}
+							d="M15 19l-7-7 7-7"
+						/>
+					</svg>
+					Back to Home
+				</Link>
+
+				{/* Hero section */}
+				<div className="flex flex-col md:flex-row gap-8 mb-10">
+					{/* Cover art */}
+					<div className="w-full md:w-72 shrink-0">
+						<div className="relative w-full pt-[100%] rounded-xl overflow-hidden shadow-2xl bg-[#181818]">
+							<img
+								src={song.cover ? `${baseURL}/${song.cover}` : "/favicon.png"}
+								alt={song.title}
+								className="absolute inset-0 w-full h-full object-cover"
+								onError={(e) => {
+									(e.target as HTMLImageElement).src = "/favicon.png";
+								}}
+							/>
+						</div>
+					</div>
+
+					{/* Song info */}
+					<div className="flex flex-col justify-end gap-3 min-w-0">
+						<span className="text-xs uppercase tracking-widest text-gray-400 font-medium">
+							{song.genre} • Song
+						</span>
+						<h1 className="text-4xl md:text-5xl font-extrabold leading-tight truncate">
+							{song.title}
+						</h1>
+
+						{/* Main artist */}
+						<p className="text-xl text-gray-300 font-semibold">
+							{song.releasedBy}
+						</p>
+
+						{/* Album */}
+						{song.album && (
+							<p className="text-sm text-gray-500">
+								Album: <span className="text-gray-300">{song.album}</span>
+							</p>
+						)}
+
+						{/* Rating summary */}
+						{avgRating && (
+							<div className="flex items-center gap-2 mt-1">
+								{renderStars(Math.round(Number(avgRating)))}
+								<span className="text-sm text-gray-400">
+									{avgRating} · {song.reviews.length}{" "}
+									{song.reviews.length === 1 ? "review" : "reviews"}
+								</span>
+							</div>
+						)}
+
+						{/* Action buttons */}
+						<div className="flex items-center gap-3 mt-4">
+							{/* Play button */}
+							{song.link && (
+								<button
+									onClick={() =>
+										play({
+											id: song.id,
+											title: song.title,
+											artist: song.releasedBy,
+											cover: song.cover,
+											embedUrl: toEmbedUrl(song.link!),
+										})
+									}
+									className={`flex items-center gap-2 px-6 py-3 rounded-full text-sm font-semibold transition-all cursor-pointer ${
+										currentSong?.id === song.id
+											? "bg-white text-[#1db954]"
+											: "bg-[#1db954] text-black hover:bg-[#1ed760] hover:scale-105"
+									}`}
+								>
+									{currentSong?.id === song.id ? (
+										<>
+											<svg
+												className="w-5 h-5"
+												fill="currentColor"
+												viewBox="0 0 24 24"
+											>
+												<path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z" />
+											</svg>
+											Now Playing
+										</>
+									) : (
+										<>
+											<svg
+												className="w-5 h-5"
+												fill="currentColor"
+												viewBox="0 0 24 24"
+											>
+												<path d="M8 5v14l11-7z" />
+											</svg>
+											Play Song
+										</>
+									)}
+								</button>
+							)}
+
+							{user && (
+								<>
+									<button
+										onClick={toggleLike}
+										className={`flex items-center gap-2 px-5 py-3 rounded-full text-sm font-semibold transition-colors cursor-pointer ${
+											song.isLikedByCurrentUser
+												? "bg-[#1db954] text-black"
+												: "bg-white/10 text-white hover:bg-white/20"
+										}`}
+									>
+										{song.isLikedByCurrentUser ? (
+											<svg
+												className="w-5 h-5"
+												fill="currentColor"
+												viewBox="0 0 24 24"
+											>
+												<path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
+											</svg>
+										) : (
+											<svg
+												className="w-5 h-5"
+												fill="none"
+												stroke="currentColor"
+												viewBox="0 0 24 24"
+											>
+												<path
+													strokeLinecap="round"
+													strokeLinejoin="round"
+													strokeWidth={2}
+													d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"
+												/>
+											</svg>
+										)}
+										{song.isLikedByCurrentUser ? "Liked" : "Like"}
+									</button>
+
+									{/* Add to Playlist button */}
+									<div className="relative">
+										<button
+											onClick={() => setShowPlaylistDropdown((prev) => !prev)}
+											className="flex items-center gap-2 px-5 py-3 rounded-full text-sm font-semibold bg-white/10 text-white hover:bg-white/20 transition-colors cursor-pointer"
+										>
+											<svg
+												className="w-5 h-5"
+												fill="none"
+												stroke="currentColor"
+												viewBox="0 0 24 24"
+											>
+												<path
+													strokeLinecap="round"
+													strokeLinejoin="round"
+													strokeWidth={2}
+													d="M12 4v16m8-8H4"
+												/>
+											</svg>
+											Add to Playlist
+										</button>
+
+										<PlaylistDropdown
+											songId={song.id}
+											isOpen={showPlaylistDropdown}
+											onClose={() => setShowPlaylistDropdown(false)}
+											direction="below"
+										/>
+									</div>
+								</>
+							)}
+						</div>
+					</div>
+				</div>
+
+				{/* Credits / Contributions */}
+				{song.contributions.length > 0 && (
+					<section className="mb-10">
+						<h2 className="text-2xl font-bold mb-4">Credits</h2>
+						<div className="bg-[#1a1a2e]/60 rounded-xl p-5 divide-y divide-white/5">
+							{/* Main artist first */}
+							{song.contributions
+								.filter((c) => c.artistName === song.releasedBy)
+								.map((c, i) => (
+									<div
+										key={`main-${i}`}
+										className="flex items-center justify-between py-3 first:pt-0 last:pb-0"
+									>
+										<div className="flex items-center gap-3">
+											<div className="w-10 h-10 bg-[#1db954] rounded-full flex items-center justify-center text-black font-bold text-sm">
+												{c.artistName.charAt(0).toUpperCase()}
+											</div>
+											<div>
+												<p className="text-white font-semibold text-lg">
+													{c.artistName}
+												</p>
+											</div>
+										</div>
+										<span className="text-sm text-gray-400 bg-white/5 px-3 py-1 rounded-full">
+											{formatRole(c.role)}
+										</span>
+									</div>
+								))}
+
+							{/* Other contributors */}
+							{otherContributors.map((c, i) => (
+								<div
+									key={`contrib-${i}`}
+									className="flex items-center justify-between py-3 first:pt-0 last:pb-0"
+								>
+									<div className="flex items-center gap-3">
+										<div className="w-9 h-9 bg-white/10 rounded-full flex items-center justify-center text-white font-medium text-sm">
+											{c.artistName.charAt(0).toUpperCase()}
+										</div>
+										<p className="text-gray-300 font-medium">{c.artistName}</p>
+									</div>
+									<span className="text-sm text-gray-500 bg-white/5 px-3 py-1 rounded-full">
+										{formatRole(c.role)}
+									</span>
+								</div>
+							))}
+						</div>
+					</section>
+				)}
+
+				{/* Reviews */}
+				<section>
+					<div className="flex items-center justify-between mb-4">
+						<h2 className="text-2xl font-bold">
+							Reviews
+							{song.reviews.length > 0 && (
+								<span className="text-base font-normal text-gray-500 ml-2">
+									({song.reviews.length})
+								</span>
+							)}
+						</h2>
+						{user != null && (
+							<button
+								onClick={() => setShowReviewModal(true)}
+								className="flex items-center gap-2 bg-[#1db954] hover:bg-[#1ed760] text-black text-sm font-semibold px-4 py-2 rounded-full transition-colors cursor-pointer"
+							>
+								<svg
+									className="w-4 h-4"
+									fill="none"
+									stroke="currentColor"
+									viewBox="0 0 24 24"
+								>
+									<path
+										strokeLinecap="round"
+										strokeLinejoin="round"
+										strokeWidth={2}
+										d="M12 4v16m8-8H4"
+									/>
+								</svg>
+								Add Review
+							</button>
+						)}
+					</div>
+
+					{song.reviews.length === 0 ? (
+						<div className="bg-[#1a1a2e]/60 rounded-xl p-10 text-center">
+							<p className="text-gray-500 text-lg">No reviews yet.</p>
+							<p className="text-gray-600 text-sm mt-1">
+								Be the first to share your thoughts!
+							</p>
+						</div>
+					) : (
+						<div className="space-y-4">
+							{song.reviews.map((review) => (
+								<div
+									key={`${review.id.listenerId}-${review.id.musicalEntityId}`}
+									className="bg-[#1a1a2e]/60 rounded-xl p-5 hover:bg-[#1a1a2e]/80 transition-colors"
+								>
+									<div className="flex items-start justify-between mb-2">
+										<div className="flex items-center gap-3">
+											<div className="w-9 h-9 bg-blue-500/20 rounded-full flex items-center justify-center">
+												<span className="text-blue-400 font-semibold text-sm">
+													{review.author.charAt(0).toUpperCase()}
+												</span>
+											</div>
+											<div>
+												<p className="text-white font-medium">
+													{review.author}
+												</p>
+												{renderStars(review.grade)}
+											</div>
+										</div>
+										{user?.username === review.authorUsername && (
+											<button
+												onClick={deleteReview}
+												className="text-gray-500 hover:text-red-400 transition-colors p-2 rounded-lg hover:bg-red-400/10 cursor-pointer"
+												title="Delete review"
+											>
+												<svg
+													className="w-5 h-5"
+													fill="none"
+													stroke="currentColor"
+													viewBox="0 0 24 24"
+												>
+													<path
+														strokeLinecap="round"
+														strokeLinejoin="round"
+														strokeWidth={2}
+														d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"
+													/>
+												</svg>
+											</button>
+										)}
+									</div>
+									<p className="text-gray-300 text-sm leading-relaxed mt-3 pl-12">
+										{review.comment}
+									</p>
+								</div>
+							))}
+						</div>
+					)}
+				</section>
+			</div>
+
+			{/* Review Modal */}
+			{showReviewModal && (
+				<div className="fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/70 backdrop-blur-sm">
+					<div className="bg-[#1a1a2e] rounded-2xl p-6 max-w-md w-full shadow-2xl">
+						<div className="flex items-center justify-between mb-6">
+							<h3 className="text-2xl font-bold">Add Review</h3>
+							<button
+								onClick={() => {
+									setShowReviewModal(false);
+									setReviewRating(0);
+									setReviewComment("");
+									setHoverRating(0);
+								}}
+								className="text-gray-400 hover:text-white transition-colors cursor-pointer"
+							>
+								<svg
+									className="w-6 h-6"
+									fill="none"
+									stroke="currentColor"
+									viewBox="0 0 24 24"
+								>
+									<path
+										strokeLinecap="round"
+										strokeLinejoin="round"
+										strokeWidth={2}
+										d="M6 18L18 6M6 6l12 12"
+									/>
+								</svg>
+							</button>
+						</div>
+
+						{/* Star Rating */}
+						<div className="mb-6">
+							<label className="block text-sm font-medium mb-3">
+								Rating <span className="text-red-400">*</span>
+							</label>
+							<div className="flex gap-2">
+								{[1, 2, 3, 4, 5].map((star) => (
+									<button
+										key={star}
+										onClick={() => setReviewRating(star)}
+										onMouseEnter={() => setHoverRating(star)}
+										onMouseLeave={() => setHoverRating(0)}
+										className="transition-transform hover:scale-110 cursor-pointer"
+									>
+										<svg
+											className={`w-10 h-10 ${
+												star <= (hoverRating || reviewRating)
+													? "text-yellow-400"
+													: "text-gray-600"
+											}`}
+											fill="currentColor"
+											viewBox="0 0 20 20"
+										>
+											<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" />
+										</svg>
+									</button>
+								))}
+							</div>
+						</div>
+
+						{/* Comment */}
+						<div className="mb-6">
+							<label className="block text-sm font-medium mb-2">
+								Comment <span className="text-gray-500">(optional)</span>
+							</label>
+							<textarea
+								value={reviewComment}
+								onChange={(e) => setReviewComment(e.target.value)}
+								placeholder="Share your thoughts about this song..."
+								rows={4}
+								className="w-full bg-[#0f0f1e] border border-white/10 rounded-lg px-4 py-3 text-white placeholder-gray-500 focus:outline-none focus:border-[#1db954] transition-colors resize-none"
+							/>
+						</div>
+
+						{/* Actions */}
+						<div className="flex gap-3 justify-end">
+							<button
+								onClick={() => {
+									setShowReviewModal(false);
+									setReviewRating(0);
+									setReviewComment("");
+									setHoverRating(0);
+								}}
+								className="px-5 py-2.5 rounded-full text-sm font-semibold bg-white/10 hover:bg-white/20 transition-colors cursor-pointer"
+							>
+								Cancel
+							</button>
+							<button
+								onClick={handleSubmitReview}
+								disabled={reviewRating === 0}
+								className="px-5 py-2.5 rounded-full text-sm font-semibold bg-[#1db954] hover:bg-[#1ed760] text-black transition-colors disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer"
+							>
+								Submit
+							</button>
+						</div>
+					</div>
+				</div>
+			)}
+		</div>
+	);
 };
 
