Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/PlaylistController.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/PlaylistController.java	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/PlaylistController.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -1,4 +1,5 @@
 package com.ukim.finki.develop.finkwave.controller;
 
+import com.ukim.finki.develop.finkwave.model.dto.BasicPlaylistDto;
 import com.ukim.finki.develop.finkwave.model.dto.PlaylistDto;
 import com.ukim.finki.develop.finkwave.service.PlaylistService;
@@ -11,4 +12,6 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
 
 @RestController
@@ -23,3 +26,8 @@
     }
 
+    @GetMapping("/user")
+    public HttpEntity<List<BasicPlaylistDto>> getUserBasicPlaylists(){
+        return ResponseEntity.ok(playlistService.getBasicPlaylists());
+    }
+
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/SongController.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/SongController.java	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/SongController.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -1,4 +1,5 @@
 package com.ukim.finki.develop.finkwave.controller;
 
+import com.ukim.finki.develop.finkwave.model.dto.BasicSongDto;
 import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto;
 import com.ukim.finki.develop.finkwave.repository.SongRepository;
@@ -23,5 +24,5 @@
 
     @GetMapping("/top")
-    private HttpEntity<List<MusicalEntityDto>> getSongs(){
+    public HttpEntity<List<MusicalEntityDto>> getSongs(){
         Long userId = authService.getCurrentUserID();
         return ResponseEntity.ok(songService.getTopSongs(userId));
@@ -29,7 +30,12 @@
 
     @GetMapping("/search")
-    private HttpEntity<List<MusicalEntityDto>> searchSongs(
+    public HttpEntity<List<MusicalEntityDto>> searchSongs(
             @RequestParam(name = "q") String searchTerm){
         return ResponseEntity.ok(songService.searchSongs(null, searchTerm));
     }
+
+    @GetMapping("/recent")
+    public HttpEntity<List<BasicSongDto>> getRecentlyListenedSongs(){
+        return ResponseEntity.ok(songService.getRecentlyListened());
+    }
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Listen.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Listen.java	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/Listen.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -2,5 +2,4 @@
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import jakarta.persistence.*;
 import lombok.Getter;
@@ -8,6 +7,4 @@
 import org.hibernate.annotations.OnDelete;
 import org.hibernate.annotations.OnDeleteAction;
-
-import java.time.LocalDateTime;
 
 @Getter
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/BasicPlaylistDto.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/BasicPlaylistDto.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/BasicPlaylistDto.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -0,0 +1,8 @@
+package com.ukim.finki.develop.finkwave.model.dto;
+
+
+public record BasicPlaylistDto(
+    Long id,
+    String name,
+    String cover,
+    Long songCount){}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/BasicSongDto.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/BasicSongDto.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/BasicSongDto.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -0,0 +1,10 @@
+package com.ukim.finki.develop.finkwave.model.dto;
+
+import jakarta.annotation.Nullable;
+
+public record BasicSongDto (
+    Long id,
+    String title,
+    String artist,
+    @Nullable String cover
+){}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/PlaylistRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/PlaylistRepository.java	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/PlaylistRepository.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -1,4 +1,5 @@
 package com.ukim.finki.develop.finkwave.repository;
 
+import com.ukim.finki.develop.finkwave.model.dto.BasicPlaylistDto;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
@@ -23,7 +24,12 @@
     List<Playlist> findByCreatorId(@Param("creatorId") Long creatorId);
 
-
-
-
-
+    @SuppressWarnings("JpaQlInspection") // count returns long, intellij expects int
+    @Query("""
+    SELECT NEW com.ukim.finki.develop.finkwave.model.dto.BasicPlaylistDto(
+    p.id, p.name, p.cover, (SELECT COUNT(*) FROM PlaylistSong ps where ps.playlist.id = p.id)
+    )
+    FROM Playlist p
+    WHERE p.createdBy.id = :userId
+    """)
+    List<BasicPlaylistDto> getPlaylistsByIdIs(@Param("userId") Long userId);
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/SongRepository.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -1,4 +1,5 @@
 package com.ukim.finki.develop.finkwave.repository;
 
+import com.ukim.finki.develop.finkwave.model.dto.BasicSongDto;
 import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -48,5 +49,7 @@
     @Query("""
         SELECT NEW com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto(
-        s.id, me.title, me.genre, 'SONG', u.fullName, me.cover, FALSE)
+        s.id, me.title, me.genre, 'SONG', u.fullName, me.cover,
+            (EXISTS (SELECT 1 FROM Like l WHERE l.musicalEntity.id = s.id AND l.listener.id = :currentUserId))
+        )
         FROM Song s
         JOIN s.musicalEntities me
@@ -58,8 +61,6 @@
         ORDER BY count(*) desc
     """)
-    // todo: handle likes, momentalno site se false za da raboti joinot
     // todo: add paging
     List<MusicalEntityDto> findTopByListens(@Param("currentUserId")Long currentUserId);
-
 
     // todo: fix is liked by user, currently returns hard coded false
@@ -72,7 +73,22 @@
         JOIN a.nonAdminUser nau
         JOIN nau.user u
-        WHERE me.title ILIKE %:searchTerm%
+        WHERE me.title ILIKE '%' || :searchTerm || '%'
     """)
     List<MusicalEntityDto> searchSongs(@Param("currentUserId")Long currentUserId, @Param("searchTerm") String searchTerm);
 
+
+    @Query(value = """
+        SELECT DISTINCT on (l.song_id)
+            l.song_id,
+            me.title,
+            u.full_name,
+            me.cover
+        FROM LISTENS l
+        JOIN MUSICAL_ENTITIES me on me.id = l.song_id
+        JOIN USERS u on u.user_id = l.listener_id
+        WHERE u.user_id = :userId
+        ORDER BY l.song_id, l.timestamp DESC
+        LIMIT 5
+    """, nativeQuery = true)
+    List<BasicSongDto> getRecentlyListened(@Param("userId")Long userId);
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ListenerService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ListenerService.java	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/ListenerService.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -29,4 +29,5 @@
     }
 
+
     public List<Playlist>getPlaylistsSavedByUser(Long listenerId){
         return playlistService.findSavedByUser(listenerId);
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/PlaylistService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/PlaylistService.java	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/PlaylistService.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -3,4 +3,5 @@
 import com.ukim.finki.develop.finkwave.exceptions.PlaylistNotFoundException;
 import com.ukim.finki.develop.finkwave.model.Playlist;
+import com.ukim.finki.develop.finkwave.model.dto.BasicPlaylistDto;
 import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto;
 import com.ukim.finki.develop.finkwave.model.dto.PlaylistDto;
@@ -50,4 +51,8 @@
     }
 
+    public List<BasicPlaylistDto> getBasicPlaylists(){
+        Long userId = authService.getCurrentUserID();
+        return playlistRepository.getPlaylistsByIdIs(userId);
+    }
 
 
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/SongService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/SongService.java	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/SongService.java	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -1,4 +1,5 @@
 package com.ukim.finki.develop.finkwave.service;
 
+import com.ukim.finki.develop.finkwave.model.dto.BasicSongDto;
 import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto;
 import com.ukim.finki.develop.finkwave.repository.SongRepository;
@@ -12,4 +13,5 @@
 public class SongService {
     private final SongRepository songRepository;
+    private final AuthService authService;
 
     public List<MusicalEntityDto> getTopSongs(Long userId){
@@ -20,3 +22,8 @@
         return songRepository.searchSongs(userId, searchTerm);
     }
+
+    public List<BasicSongDto> getRecentlyListened(){
+        Long userId = authService.getCurrentUserID();
+        return songRepository.getRecentlyListened(userId);
+    }
 }
Index: frontend/src/components/Sidebar.tsx
===================================================================
--- frontend/src/components/Sidebar.tsx	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ frontend/src/components/Sidebar.tsx	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -1,25 +1,30 @@
-interface SidebarProps {
-	isOpen: boolean;
-	onClose: () => void;
-}
+import { useEffect, useState } from "react";
+import axiosInstance from "../api/axiosInstance";
+import type { BasicPlaylist, BasicSong, SidebarProps } from "../utils/types";
 
 const Sidebar = ({ isOpen, onClose }: SidebarProps) => {
-	// mock data for recently listened songs
-	const recentlyListened = [
-		{ id: 1, title: "Song One", artist: "Artist A", cover: "/favicon.png" },
-		{ id: 2, title: "Song Two", artist: "Artist B", cover: "/favicon.png" },
-		{ id: 3, title: "Song Three", artist: "Artist C", cover: "/favicon.png" },
-		{ id: 4, title: "Song Four", artist: "Artist D", cover: "/favicon.png" },
-		{ id: 5, title: "Song Five", artist: "Artist E", cover: "/favicon.png" },
-	];
+	const [recentlyListened, setRecentlyListened] = useState<BasicSong[]>([]);
+	const [playlists, setPlaylists] = useState<BasicPlaylist[]>([]);
 
-	// mock data for my playlists
-	const playlists = [
-		{ id: 1, name: "My Favorites", songCount: 25 },
-		{ id: 2, name: "Workout Mix", songCount: 18 },
-		{ id: 3, name: "Chill Vibes", songCount: 32 },
-		{ id: 4, name: "Party Hits", songCount: 45 },
-	];
-
+	useEffect(() => {
+		const fetchData = async () => {
+			try {
+				const data = await axiosInstance.get<BasicSong[]>("/songs/recent");
+				setRecentlyListened(data.data);
+			} catch (error) {
+				console.error("Error fetching recently listened songs:", error);
+				// todo: show toast
+			}
+			try {
+				const data =
+					await axiosInstance.get<BasicPlaylist[]>("/playlists/user");
+				setPlaylists(data.data);
+			} catch (error) {
+				console.error("Error fetching playlists:", error);
+				// todo: show toast
+			}
+		};
+		fetchData();
+	}, []);
 	return (
 		<div
@@ -65,5 +70,5 @@
 							>
 								<img
-									src={song.cover}
+									src={song.cover || "/favicon.png"}
 									alt={song.title}
 									className="w-10 h-10 rounded object-cover"
Index: frontend/src/pages/LandingPage.tsx
===================================================================
--- frontend/src/pages/LandingPage.tsx	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ frontend/src/pages/LandingPage.tsx	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -1,3 +1,3 @@
-import { useEffect, useState } from "react";
+import { useEffect, useRef, useState } from "react";
 import axiosInstance from "../api/axiosInstance";
 import AlbumResult from "../components/search/AlbumResult";
@@ -29,4 +29,12 @@
 	const [searchLoading, setSearchLoading] = useState(false);
 	const [hasSearched, setHasSearched] = useState(false);
+
+	// playlist dropdown state
+	const [openPlaylistDropdown, setOpenPlaylistDropdown] = useState<
+		number | null
+	>(null);
+	const playlistDropdownRefs = useRef<{ [key: number]: HTMLDivElement | null }>(
+		{},
+	);
 
 	useEffect(() => {
@@ -43,4 +51,52 @@
 		fetchSongs();
 	}, []);
+
+	// Handle click outside for playlist dropdown
+	useEffect(() => {
+		const handleClickOutside = (event: MouseEvent) => {
+			if (openPlaylistDropdown !== null) {
+				const ref = playlistDropdownRefs.current[openPlaylistDropdown];
+				if (ref && !ref.contains(event.target as Node)) {
+					setOpenPlaylistDropdown(null);
+				}
+			}
+		};
+
+		document.addEventListener("mousedown", handleClickOutside);
+		return () => {
+			document.removeEventListener("mousedown", handleClickOutside);
+		};
+	}, [openPlaylistDropdown]);
+
+	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) => {
+		setOpenPlaylistDropdown((prev) => (prev === songId ? null : songId));
+	};
+
+	const handleAddToPlaylist = (songId: number, playlistName: string) => {
+		console.log(`Adding song ${songId} to ${playlistName}`);
+		// TODO: Implement actual API call
+		setOpenPlaylistDropdown(null);
+	};
+
+	const handleCreateNewPlaylist = (songId: number) => {
+		console.log(`Creating new playlist for song ${songId}`);
+		// TODO: Implement actual playlist creation
+		setOpenPlaylistDropdown(null);
+	};
 
 	const performSearch = async (query: string, category: SearchCategory) => {
@@ -289,5 +345,5 @@
 													</div>
 												</div>
-												<div className="p-4 flex flex-col items-center">
+												<div className="p-4">
 													<h3 className="text-lg font-semibold mb-2 text-white overflow-hidden text-ellipsis whitespace-nowrap">
 														{song.title}
@@ -299,4 +355,129 @@
 														{song.releasedBy}
 													</p>
+													<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"
+															ref={(el) => {
+																if (el)
+																	playlistDropdownRefs.current[song.id] = el;
+															}}
+														>
+															<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>
+
+															{/* Playlist dropdown */}
+															{openPlaylistDropdown === song.id && (
+																<div className="absolute right-0 bottom-full mb-2 w-48 bg-gray-700 rounded-lg shadow-lg py-1 z-50">
+																	<div className="px-3 py-2 text-xs text-gray-400 border-b border-white/10">
+																		Add to playlist
+																	</div>
+																	<button
+																		onClick={(e) => {
+																			e.stopPropagation();
+																			handleAddToPlaylist(
+																				song.id,
+																				"Playlist 1",
+																			);
+																		}}
+																		className="w-full text-left px-4 py-2 text-sm text-white hover:bg-gray-600 transition-colors"
+																	>
+																		Playlist 1
+																	</button>
+																	<button
+																		onClick={(e) => {
+																			e.stopPropagation();
+																			handleAddToPlaylist(
+																				song.id,
+																				"Playlist 2",
+																			);
+																		}}
+																		className="w-full text-left px-4 py-2 text-sm text-white hover:bg-gray-600 transition-colors"
+																	>
+																		Playlist 2
+																	</button>
+																	<button
+																		onClick={(e) => {
+																			e.stopPropagation();
+																			handleCreateNewPlaylist(song.id);
+																		}}
+																		className="w-full text-left px-4 py-2 text-sm text-[#1db954] hover:bg-gray-600 transition-colors border-t border-white/10 flex items-center gap-2"
+																	>
+																		<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>
+																		Create new playlist
+																	</button>
+																</div>
+															)}
+														</div>
+													</div>
 												</div>
 											</div>
Index: frontend/src/utils/types.ts
===================================================================
--- frontend/src/utils/types.ts	(revision 2ce7c1e0bad813ed1a0f626dac2d85bf67c1c891)
+++ frontend/src/utils/types.ts	(revision b071fb4a2344e233ee12641fe437797ae1bbb736)
@@ -57,2 +57,20 @@
 
 export type SearchCategory = "songs" | "albums" | "artists" | "users";
+
+export interface SidebarProps {
+	isOpen: boolean;
+	onClose: () => void;
+}
+
+export interface BasicSong {
+	id: number;
+	title: string;
+	artist: string;
+	cover?: string;
+}
+
+export interface BasicPlaylist {
+	id: number;
+	name: string;
+	songCount: number;
+}
