Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/TestController.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/TestController.java	(revision 8dd3e225d135d25c1720d89f383ea1b8819c0874)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/TestController.java	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
@@ -1,12 +1,9 @@
 package com.ukim.finki.develop.finkwave.controller;
 
-import com.ukim.finki.develop.finkwave.model.MusicalEntity;
-import com.ukim.finki.develop.finkwave.model.User;
-import com.ukim.finki.develop.finkwave.model.dto.MusicalEntityDto;
 import com.ukim.finki.develop.finkwave.model.dto.SongDto;
+import com.ukim.finki.develop.finkwave.model.dto.UserSearchResultDto;
 import com.ukim.finki.develop.finkwave.repository.SongRepository;
 import com.ukim.finki.develop.finkwave.repository.UserRepository;
 import lombok.AllArgsConstructor;
-import lombok.Getter;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.ResponseEntity;
@@ -28,10 +25,10 @@
 
     @GetMapping("/search/u/{searchTerm}")
-    public HttpEntity<List<User>> searchUsersTest(@PathVariable String searchTerm){
-        return ResponseEntity.ok(userRepository.searchListeners(searchTerm));
+    public HttpEntity<List<UserSearchResultDto>> searchUsersTest(@PathVariable String searchTerm){
+        return ResponseEntity.ok(userRepository.searchListeners(searchTerm, 10));
     }
     @GetMapping("/search/a/{searchTerm}")
-    public HttpEntity<List<User>> searchArtistsTest(@PathVariable String searchTerm){
-        return ResponseEntity.ok(userRepository.searchArtists(searchTerm));
+    public HttpEntity<List<UserSearchResultDto>> searchArtistsTest(@PathVariable String searchTerm){
+        return ResponseEntity.ok(userRepository.searchArtists(searchTerm, 10));
     }
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/UserController.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/UserController.java	(revision 8dd3e225d135d25c1720d89f383ea1b8819c0874)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/UserController.java	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
@@ -2,4 +2,5 @@
 
 import com.ukim.finki.develop.finkwave.model.User;
+import com.ukim.finki.develop.finkwave.model.dto.UserSearchResultDto;
 import com.ukim.finki.develop.finkwave.model.enums.UserType;
 import com.ukim.finki.develop.finkwave.service.UserService;
@@ -24,8 +25,10 @@
 
     @GetMapping("/search")
-    public HttpEntity<List<User>> searchArtists(
+    public HttpEntity<List<UserSearchResultDto>> searchArtists(
             @RequestParam(name = "type") UserType userType,
-            @RequestParam(name = "q") String searchTerm){
-        return ResponseEntity.ok(usersService.search(userType, searchTerm));
+            @RequestParam(name = "q") String searchTerm,
+            @RequestParam(name = "limit", defaultValue = "10") Integer limit)
+            {
+        return ResponseEntity.ok(usersService.search(userType, searchTerm, limit));
     }
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/UserSearchResultDto.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/UserSearchResultDto.java	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/dto/UserSearchResultDto.java	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
@@ -0,0 +1,8 @@
+package com.ukim.finki.develop.finkwave.model.dto;
+
+
+public record UserSearchResultDto(
+    String fullName,
+    String username,
+    String profilePhoto
+){}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/UserRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/UserRepository.java	(revision 8dd3e225d135d25c1720d89f383ea1b8819c0874)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/UserRepository.java	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
@@ -2,6 +2,8 @@
 
 import com.ukim.finki.develop.finkwave.model.User;
+import com.ukim.finki.develop.finkwave.model.dto.UserSearchResultDto;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
@@ -14,16 +16,19 @@
 
 
-    @Query("""
-        SELECT u from User u
-        WHERE (u.fullName ILIKE '%' || :searchTerm || '%' or u.username ILIKE '%' || :searchTerm || '%')
+    @Query(value = """
+        SELECT u.full_name, u.username, u.profile_photo from users u
+        WHERE (u.full_name ILIKE '%' || :searchTerm || '%' or u.username ILIKE '%' || :searchTerm || '%')
             and u.listener = true and u.artist = false
-        """)
-    List<User> searchListeners(String searchTerm);
+        LIMIT :limit
+        """, nativeQuery = true)
+    List<UserSearchResultDto> searchListeners(@Param("searchTerm") String searchTerm, @Param("limit") Integer limit);
 
-    @Query("""
-        SELECT u from User u
-        WHERE (u.fullName ILIKE '%' || :searchTerm || '%' or u.username ILIKE '%' || :searchTerm || '%')
-            and u.artist = true
-        """)
-    List<User> searchArtists(String searchTerm);
+    @Query(value = """
+        SELECT u.full_name, u.username, u.profile_photo from users u
+        WHERE (u.full_name ILIKE '%' || :searchTerm || '%' or u.username ILIKE '%' || :searchTerm || '%') and u.artist = true
+        LIMIT :limit
+        """, nativeQuery = true)
+    List<UserSearchResultDto> searchArtists(@Param("searchTerm") String searchTerm, @Param("limit") Integer limit);
+
+
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/UserService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/UserService.java	(revision 8dd3e225d135d25c1720d89f383ea1b8819c0874)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/UserService.java	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
@@ -2,4 +2,5 @@
 
 import com.ukim.finki.develop.finkwave.model.User;
+import com.ukim.finki.develop.finkwave.model.dto.UserSearchResultDto;
 import com.ukim.finki.develop.finkwave.model.enums.UserType;
 import com.ukim.finki.develop.finkwave.repository.UserRepository;
@@ -18,11 +19,8 @@
     }
 
-    // todo: add dto-s
-
-    public List<User> search(UserType userType, String searchTerm){
-
+    public List<UserSearchResultDto> search(UserType userType, String searchTerm, int limit){
         return switch (userType) {
-            case ARTIST -> usersRepository.searchArtists(searchTerm);
-            case LISTENER -> usersRepository.searchListeners(searchTerm);
+            case ARTIST -> usersRepository.searchArtists(searchTerm, limit);
+            case LISTENER -> usersRepository.searchListeners(searchTerm, limit);
             case null -> throw new IllegalArgumentException("Invalid userType");
         };
Index: frontend/src/pages/PublishSong.tsx
===================================================================
--- frontend/src/pages/PublishSong.tsx	(revision 8dd3e225d135d25c1720d89f383ea1b8819c0874)
+++ frontend/src/pages/PublishSong.tsx	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
@@ -2,67 +2,12 @@
 import { Link, useNavigate } from "react-router-dom";
 import { toast } from "react-toastify";
+import axiosInstance from "../api/axiosInstance";
 import { useAuth } from "../context/authContext";
-
-interface Contributor {
-	username: string;
-	fullName: string;
-	role: string;
-}
-
-interface ArtistSearchResult {
-	username: string;
-	fullName: string;
-	profilePhoto?: string;
-}
-
-interface SongEntry {
-	title: string;
-	link: string;
-	contributors: Contributor[];
-}
-
-const ROLE_OPTIONS = [
-	{ value: "FEATURED", label: "Featured" },
-	{ value: "PRODUCER", label: "Producer" },
-	{ value: "SONGWRITER", label: "Songwriter" },
-	{ value: "COMPOSER", label: "Composer" },
-	{ value: "MIXER", label: "Mixer" },
-	{ value: "ENGINEER", label: "Engineer" },
-];
-
-const GENRE_OPTIONS = [
-	"Pop",
-	"Rock",
-	"Hip-Hop",
-	"R&B",
-	"Electronic",
-	"Jazz",
-	"Classical",
-	"Country",
-	"Folk",
-	"Latin",
-	"Metal",
-	"Punk",
-	"Indie",
-	"Alternative",
-	"Blues",
-	"Soul",
-	"Reggae",
-	"Funk",
-	"Disco",
-	"House",
-	"Techno",
-	"Ambient",
-	"Other",
-];
-
-// Mock artist search results
-const MOCK_ARTISTS: ArtistSearchResult[] = [
-	{ username: "john_doe", fullName: "John Doe" },
-	{ username: "jane_smith", fullName: "Jane Smith" },
-	{ username: "mike_producer", fullName: "Mike the Producer" },
-	{ username: "sarah_vocals", fullName: "Sarah Vocals" },
-	{ username: "alex_beats", fullName: "Alex Beats" },
-];
+import { GENRE_OPTIONS, ROLE_OPTIONS } from "../utils/consts";
+import type {
+	ArtistSearchResult,
+	Contributor,
+	SongEntry,
+} from "../utils/types";
 
 const MAX_CONTRIBUTORS = 5;
@@ -145,12 +90,10 @@
 		setIsSearching(true);
 		try {
-			// TODO: replace with api call
-			// const response = await axiosInstance.get(`/users/search?type=ARTIST&q=${encodeURIComponent(query)}`);
-			// setSearchResults(response.data);
-
-			// Mock search - filter by name
-			await new Promise((resolve) => setTimeout(resolve, 200));
-			const filtered = MOCK_ARTISTS.filter(
-				(artist) =>
+			const response = await axiosInstance.get(
+				`/users/search?type=ARTIST&q=${encodeURIComponent(query)}&limit=5`,
+			);
+
+			const filtered = response.data.filter(
+				(artist: ArtistSearchResult) =>
 					artist.fullName.toLowerCase().includes(query.toLowerCase()) ||
 					artist.username.toLowerCase().includes(query.toLowerCase()),
@@ -276,7 +219,9 @@
 
 			// TODO: replace with api call
-			await new Promise((resolve) => setTimeout(resolve, 200));
-			const filtered = MOCK_ARTISTS.filter(
-				(artist) =>
+			const response = await axiosInstance.get(
+				`/users/search?type=ARTIST&q=${encodeURIComponent(query)}&limit=5`,
+			);
+			const filtered = response.data.filter(
+				(artist: ArtistSearchResult) =>
 					artist.fullName.toLowerCase().includes(query.toLowerCase()) ||
 					artist.username.toLowerCase().includes(query.toLowerCase()),
Index: frontend/src/utils/consts.ts
===================================================================
--- frontend/src/utils/consts.ts	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
+++ frontend/src/utils/consts.ts	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
@@ -0,0 +1,34 @@
+export const ROLE_OPTIONS = [
+	{ value: "FEATURED", label: "Featured" },
+	{ value: "PRODUCER", label: "Producer" },
+	{ value: "SONGWRITER", label: "Songwriter" },
+	{ value: "COMPOSER", label: "Composer" },
+	{ value: "MIXER", label: "Mixer" },
+	{ value: "ENGINEER", label: "Engineer" },
+];
+
+export const GENRE_OPTIONS = [
+	"Pop",
+	"Rock",
+	"Hip-Hop",
+	"R&B",
+	"Electronic",
+	"Jazz",
+	"Classical",
+	"Country",
+	"Folk",
+	"Latin",
+	"Metal",
+	"Punk",
+	"Indie",
+	"Alternative",
+	"Blues",
+	"Soul",
+	"Reggae",
+	"Funk",
+	"Disco",
+	"House",
+	"Techno",
+	"Ambient",
+	"Other",
+];
Index: frontend/src/utils/types.ts
===================================================================
--- frontend/src/utils/types.ts	(revision 8dd3e225d135d25c1720d89f383ea1b8819c0874)
+++ frontend/src/utils/types.ts	(revision 27660af8b50619221470b2bbb054bcc3db8ed385)
@@ -117,2 +117,20 @@
 	releaseDate: string;
 }
+
+export interface Contributor {
+	username: string;
+	fullName: string;
+	role: string;
+}
+
+export interface ArtistSearchResult {
+	username: string;
+	fullName: string;
+	profilePhoto?: string;
+}
+
+export interface SongEntry {
+	title: string;
+	link: string;
+	contributors: Contributor[];
+}
