Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/GlobalExceptionHandler.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/GlobalExceptionHandler.java	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/GlobalExceptionHandler.java	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -0,0 +1,21 @@
+package com.ukim.finki.develop.finkwave.controller;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+    @ExceptionHandler(RuntimeException.class)
+    public ResponseEntity<Map<String, String>> handleRuntimeException(RuntimeException ex) {
+        Map<String, String> errorMap = new HashMap<>();
+        errorMap.put("error", ex.getMessage());
+
+        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorMap);
+    }
+}
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/NonAdminUserController.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/NonAdminUserController.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/controller/NonAdminUserController.java	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -27,3 +27,8 @@
         return ResponseEntity.ok(nonAdminUserService.getById(id));
     }
+
+    @GetMapping("/search")
+    public HttpEntity<List<NonAdminUserDTO>>searchUsers(@RequestParam String name){
+        return ResponseEntity.ok(nonAdminUserService.searchUsers(name));
+    }
 }
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/NonAdminUserRepository.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/NonAdminUserRepository.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/repository/NonAdminUserRepository.java	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -16,4 +16,9 @@
     List<NonAdminUser> findAllWithUser();
 
+    @Query("SELECT u FROM NonAdminUser u " +
+            "WHERE LOWER(u.user.fullName) LIKE LOWER(CONCAT('%', :name, '%') )"+
+            "OR  LOWER(u.user.username) LIKE LOWER(CONCAT('%', :name, '%' )) ")
+    List<NonAdminUser> searchByName(String name);
+
 
 
Index: finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java
===================================================================
--- finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/NonAdminUserService.java	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -84,4 +84,16 @@
     }
 
+
+    public List<NonAdminUserDTO>searchUsers(String name){
+        return nonAdminUserRepository.searchByName(name).stream()
+                .map(user -> {
+                    String type = determineType(user.getId());
+                    Long followers = followRepository.countByFolloweeId(user.getId());
+                    Long following = followRepository.countByFollowerId(user.getId());
+                    return mapper.toDTO(user, type, followers, following);
+                })
+                .collect(Collectors.toList());
+    }
+
     private String determineType(Long id) {
         if (artistRepository.existsById(id)) {
Index: frontend/package-lock.json
===================================================================
--- frontend/package-lock.json	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ frontend/package-lock.json	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -10,4 +10,5 @@
       "dependencies": {
         "@tailwindcss/vite": "^4.1.18",
+        "lucide-react": "^0.563.0",
         "react": "^19.2.0",
         "react-dom": "^19.2.0",
@@ -3114,4 +3115,13 @@
       }
     },
+    "node_modules/lucide-react": {
+      "version": "0.563.0",
+      "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.563.0.tgz",
+      "integrity": "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA==",
+      "license": "ISC",
+      "peerDependencies": {
+        "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
     "node_modules/magic-string": {
       "version": "0.30.21",
Index: frontend/package.json
===================================================================
--- frontend/package.json	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ frontend/package.json	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -12,4 +12,5 @@
   "dependencies": {
     "@tailwindcss/vite": "^4.1.18",
+    "lucide-react": "^0.563.0",
     "react": "^19.2.0",
     "react-dom": "^19.2.0",
Index: frontend/src/App.tsx
===================================================================
--- frontend/src/App.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ frontend/src/App.tsx	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -2,5 +2,5 @@
 import { BrowserRouter, Routes, Route } from "react-router-dom";
 import AllUsers from "./components/userProfile/AllUsersHelper";
-import UserDetail from "./components/userProfile/UserDetail";
+import UserDetail from "./components/userProfile/UserDetailView";
 
 function Home() {
Index: frontend/src/components/userProfile/AllUsersHelper.tsx
===================================================================
--- frontend/src/components/userProfile/AllUsersHelper.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ frontend/src/components/userProfile/AllUsersHelper.tsx	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -1,3 +1,3 @@
-import { useEffect, useState } from "react";
+import React, { useEffect, useState } from "react";
 import { useNavigate } from "react-router-dom";
 
@@ -10,4 +10,6 @@
 const AllUsers = () => {
   const [users, setUsers] = useState<User[]>([]);
+  const [searchedUser, setSearchedUser] = useState<string>("");
+  const [error, setError] = useState<string | null>(null);
   const navigate = useNavigate();
 
@@ -25,7 +27,40 @@
   };
 
+  const handleSearch = async (e: React.FormEvent) => {
+    e.preventDefault();
+    try {
+      const response = await fetch(
+        `http://localhost:8080/users/search?name=${searchedUser}`,
+      );
+      if (!response.ok) throw new Error("Search failed");
+
+      const data = await response.json();
+      setUsers(data);
+    } catch (err: any) {
+      setError(err.message);
+    }
+  };
+
+  if (users.length == 0) return <div className="p-6">Loading...</div>;
+
   return (
     <div className="container mx-auto p-6">
       <h1 className="text-3xl font-bold mb-6">All Users</h1>
+      <form onSubmit={handleSearch} className="flex gap-2 mb-10">
+        <input
+          type="text"
+          value={searchedUser}
+          onChange={(e) => setSearchedUser(e.target.value)}
+          className="border p-2 rounded w-full"
+          placeholder="Search for a user..."
+        />
+        <button
+          type="submit"
+          className="bg-blue-600 text-white px-6 py-2 rounded hover:bg-blue-700 transition-colors"
+        >
+          Search
+        </button>
+      </form>
+
       <div className="grid gap-4">
         {users.map((u) => (
Index: frontend/src/components/userProfile/ArtistView.tsx
===================================================================
--- frontend/src/components/userProfile/ArtistView.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ frontend/src/components/userProfile/ArtistView.tsx	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -1,3 +1,4 @@
 import { useNavigate } from "react-router-dom";
+import { Music, Disc3, Mic2 } from "lucide-react";
 
 interface ArtistContributionDTO {
@@ -15,37 +16,99 @@
   const navigate = useNavigate();
 
+  const albums = contributions.filter((c) => c.entityType === "Album");
+  const songs = contributions.filter((c) => c.entityType === "Song");
+
+  const getRoleColor = (role: string) => {
+    const colors: { [key: string]: string } = {
+      COMPOSER: "bg-purple-500",
+      PERFORMER: "bg-blue-500",
+      PRODUCER: "bg-green-500",
+      MAIN_VOCAL: "bg-pink-500",
+    };
+    return colors[role] || "bg-gray-500";
+  };
+
   return (
-    <div className="mt-8 border-t pt-6">
-      <h2 className="text-2xl font-bold mb-4">Contributions</h2>
-      <div className="grid gap-3">
-        {contributions.map((contribution, index) => (
-          <div
-            key={index}
-            className="p-4 border rounded hover:shadow-md transition-shadow cursor-pointer"
-            onClick={() =>
-              navigate(`/musical-entity/${contribution.musicalEntityId}`)
-            }
-          >
-            <div className="flex justify-between items-center">
-              <div className="flex-1">
-                <p className="font-semibold text-lg">{contribution.title}</p>
-                <p className="text-sm text-gray-500 mt-1">
-                  ID: {contribution.musicalEntityId}
-                </p>
+    <div className="mt-8">
+      {/* Albums Section */}
+      {albums.length > 0 && (
+        <div className="mb-12">
+          <div className="flex items-center gap-3 mb-6">
+            <Disc3 className="w-8 h-8 text-purple-600" />
+            <h2 className="text-3xl font-bold">Albums</h2>
+          </div>
+          <div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
+            {albums.map((album, index) => (
+              <div
+                key={index}
+                className="group cursor-pointer"
+                onClick={() =>
+                  navigate(`/musical-entity/${album.musicalEntityId}`)
+                }
+              >
+                <div className="relative aspect-square bg-linear-to-br from-purple-400 via-pink-400 to-blue-400 rounded-lg mb-3 overflow-hidden shadow-lg group-hover:shadow-2xl transition-all duration-300 group-hover:scale-105">
+                  <div className="absolute inset-0 flex items-center justify-center">
+                    <Disc3 className="w-20 h-20 text-white opacity-40" />
+                  </div>
+                  <div className="absolute bottom-0 left-0 right-0 bg-linear-to-t from-black/60 to-transparent p-4">
+                    <span
+                      className={`text-xs px-2 py-1 rounded-full text-white ${getRoleColor(album.role)}`}
+                    >
+                      {album.role.replace("_", " ")}
+                    </span>
+                  </div>
+                </div>
+                <h3 className="font-semibold text-base line-clamp-2 group-hover:text-blue-600 transition-colors">
+                  {album.title}
+                </h3>
               </div>
-              <div className="flex gap-2">
-                <span className="bg-purple-100 text-purple-800 px-3 py-1 rounded-full text-sm font-medium">
-                  {contribution.role}
-                </span>
-                <span className="bg-gray-100 text-gray-800 px-3 py-1 rounded-full text-sm font-medium">
-                  {contribution.entityType}
+            ))}
+          </div>
+        </div>
+      )}
+
+      {songs.length > 0 && (
+        <div className="mb-12">
+          <div className="flex items-center gap-3 mb-6">
+            <Music className="w-8 h-8 text-blue-600" />
+            <h2 className="text-3xl font-bold">Songs</h2>
+          </div>
+          <div className="space-y-2">
+            {songs.map((song, index) => (
+              <div
+                key={index}
+                className="group flex items-center gap-4 p-4 rounded-lg hover:bg-gray-50 transition-all cursor-pointer border border-transparent hover:border-gray-200"
+                onClick={() =>
+                  navigate(`/musical-entity/${song.musicalEntityId}`)
+                }
+              >
+                <div className="shrink-0 w-14 h-14 bg-linear-to-br from-blue-400 to-cyan-400 rounded flex items-center justify-center group-hover:scale-110 transition-transform shadow-md">
+                  <Music className="w-7 h-7 text-white" />
+                </div>
+                <div className="flex-1 min-w-0">
+                  <h3 className="font-semibold text-lg group-hover:text-blue-600 transition-colors truncate">
+                    {song.title}
+                  </h3>
+                  <div className="flex items-center gap-2 mt-1">
+                    <Mic2 className="w-4 h-4 text-gray-400" />
+                  </div>
+                </div>
+                <span
+                  className={`px-4 py-2 rounded-full text-white text-sm font-medium ${getRoleColor(song.role)} shadow-md`}
+                >
+                  {song.role.replace("_", " ")}
                 </span>
               </div>
-            </div>
+            ))}
           </div>
-        ))}
-      </div>
+        </div>
+      )}
+
       {contributions.length === 0 && (
-        <p className="text-gray-500 text-center py-4">No contributions yet</p>
+        <div className="flex flex-col items-center justify-center py-16 text-gray-400">
+          <Music className="w-24 h-24 mb-4 opacity-20" />
+          <p className="text-xl font-medium">No contributions yet</p>
+          <p className="text-sm mt-2">Start creating music to see it here</p>
+        </div>
       )}
     </div>
Index: frontend/src/components/userProfile/ListenerView.tsx
===================================================================
--- frontend/src/components/userProfile/ListenerView.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ frontend/src/components/userProfile/ListenerView.tsx	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -1,3 +1,4 @@
 import { useNavigate } from "react-router-dom";
+import { Heart, ListMusic, Music, Album } from "lucide-react";
 
 interface MusicalEntityDTO {
@@ -23,122 +24,121 @@
   const navigate = useNavigate();
 
+  const likedSongs = likedEntities.filter((e) => e.type === "SONG");
+  const likedAlbums = likedEntities.filter((e) => e.type === "ALBUM");
+
   return (
-    <div className="mt-8 border-t pt-6 space-y-10">
-      {/* --- PLAYLISTS SECTION --- */}
-      <section>
-        <h3 className="text-2xl font-bold mb-6 flex items-center gap-2">
-          <span>My Playlists</span>
-          <span className="text-sm font-normal text-gray-400">
-            ({playlists?.length})
-          </span>
-        </h3>
+    <div className="mt-8 space-y-12">
+      {playlists && playlists.length > 0 && (
+        <section>
+          <div className="flex items-center gap-2 mb-6 pb-2 border-b-2 border-gray-200">
+            <ListMusic className="w-6 h-6 text-gray-700" />
+            <h3 className="text-2xl font-bold text-gray-800">My Playlists</h3>
+            <span className="text-sm text-gray-400 ml-1">
+              ({playlists.length})
+            </span>
+          </div>
 
-        <div className="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-6">
-          {playlists?.map((playlist) => (
-            <div
-              key={playlist.id}
-              className="group cursor-pointer"
-              onClick={() => navigate(`/playlist/${playlist.id}`)}
-            >
-              {/* Playlist Cover Container */}
-              <div className="aspect-square relative overflow-hidden rounded-xl shadow-md bg-gray-200 mb-3">
-                {playlist.cover ? (
-                  <img
-                    src={playlist.cover}
-                    alt={playlist.name}
-                    className="w-full h-full object-cover transition-transform duration-300 group-hover:scale-110"
-                  />
-                ) : (
-                  <div className="w-full h-full flex items-center justify-center bg-linear-to-br from-gray-300 to-gray-400 text-white">
-                    <svg
-                      xmlns="http://www.w3.org/2000/svg"
-                      className="h-12 w-12"
-                      fill="none"
-                      viewBox="0 0 24 24"
-                      stroke="currentColor"
-                    >
-                      <path
-                        strokeLinecap="round"
-                        strokeLinejoin="round"
-                        strokeWidth={2}
-                        d="M9 19V6l12-3v13M9 19c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zm12-3c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zM9 10l12-3"
-                      />
-                    </svg>
-                  </div>
-                )}
-                {/* Hover Overlay */}
-                <div className="absolute inset-0 bg-black/20 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center">
-                  <div className="bg-blue-500 p-3 rounded-full text-white shadow-xl transform translate-y-4 group-hover:translate-y-0 transition-transform">
-                    <svg
-                      xmlns="http://www.w3.org/2000/svg"
-                      className="h-6 w-6"
-                      fill="none"
-                      viewBox="0 0 24 24"
-                      stroke="currentColor"
-                    >
-                      <path
-                        strokeLinecap="round"
-                        strokeLinejoin="round"
-                        strokeWidth={2}
-                        d="M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"
-                      />
-                    </svg>
-                  </div>
+          <div className="grid grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4">
+            {playlists.map((playlist) => (
+              <div
+                key={playlist.id}
+                className="group cursor-pointer"
+                onClick={() => navigate(`/playlist/${playlist.id}`)}
+              >
+                <div className="aspect-square rounded-md overflow-hidden bg-gray-100 mb-2 relative shadow-sm group-hover:shadow-lg transition-all">
+                  {playlist.cover ? (
+                    <img
+                      src={playlist.cover}
+                      alt={playlist.name}
+                      className="w-full h-full object-cover group-hover:opacity-90 transition-opacity"
+                    />
+                  ) : (
+                    <div className="w-full h-full bg-gradient-to-br from-gray-200 to-gray-300 flex items-center justify-center">
+                      <ListMusic className="w-10 h-10 text-gray-400" />
+                    </div>
+                  )}
+                </div>
+                <p className="text-sm font-medium text-gray-800 truncate group-hover:text-blue-600 transition-colors">
+                  {playlist.name}
+                </p>
+              </div>
+            ))}
+          </div>
+        </section>
+      )}
+
+      {likedSongs.length > 0 && (
+        <section>
+          <div className="flex items-center gap-2 mb-6 pb-2 border-b-2 border-gray-200">
+            <Heart className="w-6 h-6 text-red-500 fill-red-500" />
+            <h3 className="text-2xl font-bold text-gray-800">Liked Songs</h3>
+            <span className="text-sm text-gray-400 ml-1">
+              ({likedSongs.length})
+            </span>
+          </div>
+
+          <div className="space-y-1">
+            {likedSongs.map((song, index) => (
+              <div
+                key={song.id}
+                className="flex items-center gap-4 p-3 rounded hover:bg-gray-50 cursor-pointer group transition-colors"
+                onClick={() => navigate(`/musical-entity/${song.id}`)}
+              >
+                <span className="text-sm text-gray-400 w-8 text-right font-medium">
+                  {index + 1}
+                </span>
+                <div className="w-12 h-12 rounded bg-gradient-to-br from-red-100 to-pink-100 flex items-center justify-center flex-shrink-0">
+                  <Music className="w-6 h-6 text-red-600" />
+                </div>
+                <div className="flex-1 min-w-0">
+                  <p className="font-medium text-gray-800 truncate group-hover:text-blue-600 transition-colors">
+                    {song.title}
+                  </p>
+                  <p className="text-xs text-gray-500">{song.genre}</p>
                 </div>
               </div>
+            ))}
+          </div>
+        </section>
+      )}
 
-              <h4 className="font-bold text-gray-900 truncate group-hover:text-blue-600 transition-colors">
-                {playlist.name}
-              </h4>
-              <p className="text-xs text-gray-500 uppercase tracking-wider">
-                Playlist
-              </p>
-            </div>
-          ))}
+      {likedAlbums.length > 0 && (
+        <section>
+          <div className="flex items-center gap-2 mb-6 pb-2 border-b-2 border-gray-200">
+            <Album className="w-6 h-6 text-blue-600" />
+            <h3 className="text-2xl font-bold text-gray-800">Liked Albums</h3>
+            <span className="text-sm text-gray-400 ml-1">
+              ({likedAlbums.length})
+            </span>
+          </div>
 
-          {playlists?.length === 0 && (
-            <div className="col-span-full py-8 border-2 border-dashed border-gray-200 rounded-xl text-center">
-              <p className="text-gray-400">No playlists created yet</p>
-            </div>
-          )}
+          <div className="grid grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-5">
+            {likedAlbums.map((album) => (
+              <div
+                key={album.id}
+                className="group cursor-pointer"
+                onClick={() => navigate(`/musical-entity/${album.id}`)}
+              >
+                <div className="aspect-square rounded-lg overflow-hidden bg-gradient-to-br from-blue-100 to-indigo-100 mb-3 flex items-center justify-center shadow-sm group-hover:shadow-md transition-all">
+                  <Album className="w-16 h-16 text-blue-600 opacity-60" />
+                </div>
+                <p className="font-medium text-sm text-gray-800 truncate group-hover:text-blue-600 transition-colors">
+                  {album.title}
+                </p>
+                <p className="text-xs text-gray-500 mt-0.5">{album.genre}</p>
+              </div>
+            ))}
+          </div>
+        </section>
+      )}
+
+      {likedEntities.length === 0 && (!playlists || playlists.length === 0) && (
+        <div className="flex flex-col items-center justify-center py-16 text-gray-300">
+          <p className="text-lg font-medium text-gray-400">Nothing here yet</p>
+          <p className="text-sm text-gray-400 mt-1">
+            Start exploring music to build your collection
+          </p>
         </div>
-      </section>
-
-      {/* --- LIKED MUSIC SECTION --- */}
-      <section>
-        <h3 className="text-2xl font-bold mb-4">Liked Music</h3>
-        <div className="grid gap-2">
-          {likedEntities.map((entity) => (
-            <div
-              key={entity.id}
-              className="p-4 bg-gray-50 rounded-lg border border-transparent hover:border-gray-200 hover:bg-white transition-all cursor-pointer group shadow-xs"
-              onClick={() => navigate(`/musical-entity/${entity.id}`)}
-            >
-              <div className="flex justify-between items-center">
-                <div className="flex-1">
-                  <span className="font-semibold text-gray-800 group-hover:text-blue-600">
-                    {entity.title}
-                  </span>
-                  <p className="text-sm text-gray-500 mt-1">{entity.genre}</p>
-                </div>
-                <span
-                  className={`px-3 py-1 rounded-full text-xs font-bold tracking-wider ${
-                    entity.type === "SONG"
-                      ? "bg-green-100 text-green-700"
-                      : "bg-blue-100 text-blue-700"
-                  }`}
-                >
-                  {entity.type}
-                </span>
-              </div>
-            </div>
-          ))}
-        </div>
-        {likedEntities.length === 0 && (
-          <p className="text-gray-500 text-center py-4 italic">
-            No liked music yet
-          </p>
-        )}
-      </section>
+      )}
     </div>
   );
Index: ontend/src/components/userProfile/UserDetail.tsx
===================================================================
--- frontend/src/components/userProfile/UserDetail.tsx	(revision fd81a1852ddb6ef6fb10e109702ca71525257923)
+++ 	(revision )
@@ -1,123 +1,0 @@
-import { useEffect, useState } from "react";
-import { useParams, useNavigate } from "react-router-dom";
-import ArtistView from "./ArtistView";
-import ListenerView from "./ListenerView";
-
-interface MusicalEntityDTO {
-  id: number;
-  title: string;
-  genre: string;
-  type: string;
-}
-
-interface ArtistContributionDTO {
-  musicalEntityId: number;
-  title: string;
-  role: string;
-  entityType: string;
-}
-
-interface Playlist {
-  id: number;
-  name: string;
-  cover: string;
-  creatorName: string;
-}
-
-interface User {
-  id: number;
-  username: string;
-  fullName: string;
-  userType: string;
-  followers: number;
-  following: number;
-
-  musicalEntities?: {
-    contributions: ArtistContributionDTO[];
-  };
-
-  likes?: {
-    likedEntities: MusicalEntityDTO[];
-  };
-
-  createdPlaylists?: Playlist[];
-}
-
-const UserDetail = () => {
-  const { userId } = useParams();
-  const navigate = useNavigate();
-  const [user, setUser] = useState<User | null>(null);
-
-  useEffect(() => {
-    const fetchUser = async () => {
-      console.log(userId);
-      const response = await fetch(`http://localhost:8080/users/${userId}`);
-      const data = await response.json();
-      console.log("Fetched user data:", data);
-      setUser(data);
-    };
-    fetchUser();
-  }, [userId]);
-
-  if (!user) return <div className="p-6">Loading...</div>;
-
-  return (
-    <div className="container mx-auto p-6">
-      <button
-        onClick={() => navigate(-1)}
-        className="mb-4 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
-      >
-        ← Back
-      </button>
-
-      <div className="bg-white shadow-lg rounded-lg p-8">
-        {/* Profile Header */}
-        <div className="flex items-start gap-6 mb-8">
-          {/* Profile Photo */}
-          <div className="shrink-0">
-            <div className="w-32 h-32 rounded-full bg-linear-to-br from-blue-400 to-purple-500 flex items-center justify-center text-white text-4xl font-bold shadow-lg">
-              {user.fullName.charAt(0).toUpperCase()}
-            </div>
-          </div>
-
-          {/* User Info */}
-          <div className="flex-1">
-            <h1 className="text-4xl font-bold mb-2">{user.fullName}</h1>
-            <span className="inline-block px-3 py-1 bg-blue-100 text-blue-800 rounded-full text-sm font-medium mb-4">
-              {user.userType}
-            </span>
-
-            {/* Followers/Following Stats */}
-            <div className="flex gap-6 mb-4 text-gray-700">
-              <div className="flex flex-col">
-                <span className="text-2xl font-bold">{user.followers}</span>
-                <span className="text-sm text-gray-500">Followers</span>
-              </div>
-              <div className="flex flex-col">
-                <span className="text-2xl font-bold">{user.following}</span>
-                <span className="text-sm text-gray-500">Following</span>
-              </div>
-            </div>
-
-            <button className="px-6 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors font-medium">
-              Follow
-            </button>
-          </div>
-        </div>
-
-        {user.userType === "ARTIST" && user.musicalEntities?.contributions && (
-          <ArtistView contributions={user.musicalEntities.contributions} />
-        )}
-
-        {user.userType === "LISTENER" && user.likes?.likedEntities && (
-          <ListenerView
-            likedEntities={user.likes.likedEntities}
-            playlists={user.createdPlaylists}
-          />
-        )}
-      </div>
-    </div>
-  );
-};
-
-export default UserDetail;
Index: frontend/src/components/userProfile/UserDetailView.tsx
===================================================================
--- frontend/src/components/userProfile/UserDetailView.tsx	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
+++ frontend/src/components/userProfile/UserDetailView.tsx	(revision a3ae097ff557650aeeb473a86f99d8430c23d60d)
@@ -0,0 +1,138 @@
+import { useEffect, useState } from "react";
+import { useParams, useNavigate } from "react-router-dom";
+import ArtistView from "./ArtistView";
+import ListenerView from "./ListenerView";
+
+interface MusicalEntityDTO {
+  id: number;
+  title: string;
+  genre: string;
+  type: string;
+}
+
+interface ArtistContributionDTO {
+  musicalEntityId: number;
+  title: string;
+  role: string;
+  entityType: string;
+}
+
+interface Playlist {
+  id: number;
+  name: string;
+  cover: string;
+  creatorName: string;
+}
+
+interface User {
+  id: number;
+  username: string;
+  fullName: string;
+  userType: string;
+  followers: number;
+  following: number;
+
+  musicalEntities?: {
+    contributions: ArtistContributionDTO[];
+  };
+
+  likes?: {
+    likedEntities: MusicalEntityDTO[];
+  };
+
+  createdPlaylists?: Playlist[];
+}
+
+const UserDetail = () => {
+  const { userId } = useParams();
+  const navigate = useNavigate();
+  const [user, setUser] = useState<User | null>(null);
+  const [error, setError] = useState<string | null>(null);
+
+  useEffect(() => {
+    const fetchUser = async () => {
+      setError(null);
+      try {
+        const response = await fetch(`http://localhost:8080/users/${userId}`);
+
+        if (!response.ok) {
+          const errorData = await response.json();
+          throw new Error(errorData.error || "Failed to fetch user");
+        }
+
+        const data = await response.json();
+        setUser(data);
+      } catch (err: any) {
+        setError(err.message);
+      }
+    };
+    fetchUser();
+  }, [userId]);
+
+  if (error) {
+    return (
+      <div className="p-6 bg-red-50 border border-red-200 text-red-700 rounded-lg">
+        <h2 className="font-bold">Error</h2>
+        <p>{error}</p>
+      </div>
+    );
+  }
+
+  if (!user) return <div className="p-6">Loading...</div>;
+
+  return (
+    <div className="container mx-auto p-6">
+      <button
+        onClick={() => navigate(-1)}
+        className="mb-4 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
+      >
+        ← Back
+      </button>
+
+      <div className="bg-white shadow-lg rounded-lg p-8">
+        <div className="flex items-start gap-6 mb-8">
+          <div className="shrink-0">
+            <div className="w-32 h-32 rounded-full bg-linear-to-br from-blue-400 to-purple-500 flex items-center justify-center text-white text-4xl font-bold shadow-lg">
+              {user.fullName.charAt(0).toUpperCase()}
+            </div>
+          </div>
+
+          <div className="flex-1">
+            <h1 className="text-4xl font-bold mb-2">{user.fullName}</h1>
+            <span className="inline-block px-3 py-1 bg-blue-100 text-blue-800 rounded-full text-sm font-medium mb-4">
+              {user.userType}
+            </span>
+
+            <div className="flex gap-6 mb-4 text-gray-700">
+              <div className="flex flex-col">
+                <span className="text-2xl font-bold">{user.followers}</span>
+                <span className="text-sm text-gray-500">Followers</span>
+              </div>
+              <div className="flex flex-col">
+                <span className="text-2xl font-bold">{user.following}</span>
+                <span className="text-sm text-gray-500">Following</span>
+              </div>
+            </div>
+
+            <button className="px-6 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors font-medium">
+              Follow
+            </button>
+          </div>
+        </div>
+
+        {user.userType === "ARTIST" && user.musicalEntities?.contributions && (
+          <ArtistView contributions={user.musicalEntities.contributions} />
+        )}
+
+        {user.userType === "LISTENER" && user.likes?.likedEntities && (
+          <ListenerView
+            likedEntities={user.likes.likedEntities}
+            playlists={user.createdPlaylists}
+          />
+        )}
+      </div>
+    </div>
+  );
+};
+
+export default UserDetail;
