Index: frontend/src/components/Sidebar.tsx
===================================================================
--- frontend/src/components/Sidebar.tsx	(revision 615dceec5ce09f962e30b3bc96b8c511eea814eb)
+++ 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 615dceec5ce09f962e30b3bc96b8c511eea814eb)
+++ 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>
+	);
 };
 
