Index: frontend/src/components/search/SongResult.tsx
===================================================================
--- frontend/src/components/search/SongResult.tsx	(revision a5406e15fca40fca7cc5f6ddb05de390f713d71b)
+++ frontend/src/components/search/SongResult.tsx	(revision 92db381e21eb0f44de317188e162a4362d50faf0)
@@ -1,87 +1,25 @@
-import { useNavigate } from "react-router-dom";
-import { usePlayer } from "../../context/playerContext";
+import axiosInstance from "../../api/axiosInstance";
 import type { Song } from "../../utils/types";
+import SongItem from "../SongItem";
 
 interface SongResultProps {
 	song: Song;
+	/** Propagate like state change upward if needed */
+	onLikeToggled?: (songId: number, isLiked: boolean) => void;
 }
 
-const toEmbedUrl = (url: string): string => {
-	try {
-		const parsed = new URL(url);
-		if (
-			(parsed.hostname === "www.youtube.com" ||
-				parsed.hostname === "youtube.com") &&
-			parsed.searchParams.has("v")
-		) {
-			return `https://www.youtube.com/embed/${parsed.searchParams.get("v")}`;
+const SongResult = ({ song, onLikeToggled }: SongResultProps) => {
+	const handleLike = async (songId: number) => {
+		try {
+			const response = await axiosInstance.post(
+				`/musical-entity/${songId}/like`,
+			);
+			onLikeToggled?.(songId, response.data.isLiked);
+		} catch (err) {
+			console.error("Error toggling like:", err);
 		}
-		if (parsed.hostname === "youtu.be") {
-			return `https://www.youtube.com/embed${parsed.pathname}`;
-		}
-		return url;
-	} catch {
-		return url;
-	}
-};
+	};
 
-const SongResult = ({ song }: SongResultProps) => {
-	const navigate = useNavigate();
-	const { play, currentSong } = usePlayer();
-
-	return (
-		<div
-			onClick={() => navigate(`/songs/${song.id}`)}
-			className="flex items-center gap-4 p-3 rounded-lg hover:bg-white/5 cursor-pointer transition-colors group"
-		>
-			<img
-				src={song.cover || "/favicon.png"}
-				alt={song.title}
-				className="w-12 h-12 rounded object-cover"
-				onError={(e) => {
-					(e.target as HTMLImageElement).src = "/favicon.png";
-				}}
-			/>
-			<div className="flex-1 min-w-0">
-				<p className="text-white font-medium truncate">{song.title}</p>
-				<p className="text-sm text-gray-400 truncate">
-					Song • {song.releasedBy}
-				</p>
-			</div>
-			<span className="text-xs text-gray-500 uppercase tracking-wider mr-2">
-				{song.genre}
-			</span>
-			{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={`p-2 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-5 h-5" fill="currentColor" viewBox="0 0 24 24">
-							<path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z" />
-						</svg>
-					) : (
-						<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
-							<path d="M8 5v14l11-7z" />
-						</svg>
-					)}
-				</button>
-			)}
-		</div>
-	);
+	return <SongItem song={song} label="Song" onLikeToggle={handleLike} />;
 };
 
