Index: frontend/src/App.tsx
===================================================================
--- frontend/src/App.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/App.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -13,6 +13,6 @@
 import Recommendations from "./pages/Recommendations";
 import Register from "./pages/Register";
+import SubjectPreferences from "./pages/SubjectPreferences";
 import SubjectView from "./pages/SubjectView";
-import FavoriteSubjects from "./pages/FavoriteSubjects";
 
 const Layout = () => (
@@ -64,8 +64,8 @@
 			},
 			{
-				path: "favorite-subjects",
+				path: "subject-preferences",
 				element: (
 					<PrivateRoute>
-						<FavoriteSubjects />
+						<SubjectPreferences />
 					</PrivateRoute>
 				),
Index: frontend/src/components/Navbar.tsx
===================================================================
--- frontend/src/components/Navbar.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/components/Navbar.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -128,9 +128,9 @@
 									</Link>
 									<Link
-										to="/favorite-subjects"
+										to="/subject-preferences"
 										className="block px-4 py-2 text-sm hover:bg-gray-100 hover:underline"
 										onClick={() => setMenuOpen(false)}
 									>
-										Омилени предмети
+										Мои предмети
 									</Link>
 
Index: frontend/src/components/SubjectCatalog/FavoriteButton.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/FavoriteButton.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/components/SubjectCatalog/FavoriteButton.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -28,12 +28,12 @@
 	const isFavorite = favoriteIds.has(subjectId);
 	const isFilled = isAuthenticated && isFavorite;
-
 	return (
 		<button
 			onClick={() => toggleFavorite(subjectId)}
 			disabled={isLoading || !isAuthenticated}
-			className={`group relative flex items-center justify-center transition-all duration-200 p-2 rounded-full ${
-				isFavorite ? "text-red-500" : "text-gray-400"
-			} ${isLoading ? "cursor-not-allowed animate-pulse" : ""}`}
+			className={`group relative flex items-center justify-center transition-all duration-200 p-2 rounded-full 
+				${!isAuthenticated ? "cursor-not-allowed" : ""}
+				${isFavorite ? "text-red-500" : "text-gray-400"}
+				${isLoading ? "cursor-not-allowed animate-pulse" : ""}`}
 			aria-label={isFavorite ? "Unfavorite" : "Favorite"}
 		>
Index: frontend/src/components/SubjectCatalog/FilterSidebar.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/FilterSidebar.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/components/SubjectCatalog/FilterSidebar.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -357,5 +357,5 @@
 				{/* TAGS */}
 				<FilterHeader
-					label="Тагови:"
+					label="Тагови"
 					filterKey="tags"
 					openFilters={openFilters}
Index: frontend/src/components/SubjectCatalog/SkeletonCard.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SkeletonCard.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/components/SubjectCatalog/SkeletonCard.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -3,14 +3,11 @@
 		<div className="w-full px-4 py-8 border rounded-md shadow animate-pulse bg-white">
 			<div className="h-4 w-3/4 bg-gray-300 rounded mb-2.5"></div>
-			<div className="h-4 w-1/2 bg-gray-200 rounded mb-7"></div>
+			<div className="h-4 w-1/2 bg-gray-200 rounded mb-16"></div>
 
-			<div className="h-4 w-full bg-gray-200 rounded mb-1"></div>
-			<div className="h-4 w-5/6 bg-gray-200 rounded mb-3"></div>
-
-			<div className="flex gap-2 mb-7">
+			{/* <div className="flex gap-2 mb-7">
 				<div className="h-5 w-20 bg-gray-300 rounded-full"></div>
 				<div className="h-5 w-24 bg-gray-300 rounded-full"></div>
 				<div className="h-5 w-16 bg-gray-300 rounded-full"></div>
-			</div>
+			</div> */}
 
 			<div className="flex justify-between items-center">
Index: frontend/src/components/SubjectCatalog/SubjectCard.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SubjectCard.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
+++ frontend/src/components/SubjectCatalog/SubjectCard.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -0,0 +1,77 @@
+import DislikeButton from "../Recommendations/DislikeButton";
+import LikeButton from "../Recommendations/LikeButton";
+import { Subject } from "../types";
+import FavoriteButton from "./FavoriteButton";
+
+interface SubjectCardProps {
+	subject: Subject;
+	openSubjectView: (subject: Subject) => void;
+	openSubjectDetails: (subject: Subject) => void;
+	canReview?: boolean;
+	isFirst?: boolean;
+	isRecommended?: boolean;
+}
+
+const SubjectCard = ({
+	subject,
+	openSubjectView,
+	openSubjectDetails,
+	canReview = false,
+	isFirst = false,
+	isRecommended = false,
+}: SubjectCardProps) => {
+	return (
+		<div
+			key={subject.id}
+			className="border border-gray-200 bg-white rounded-lg overflow-hidden shadow-sm hover:shadow-md transition-shadow duration-200"
+		>
+			<div className="p-4 min-h-full flex flex-col gap-1">
+				<div
+					className={`flex justify-between items-start 
+					${isRecommended ? "mb-16" : "mb-8"}`}
+				>
+					<div>
+						<h3 className="text-lg font-semibold">{subject.name}</h3>
+						<p className="text-gray-600">{subject.code}</p>
+					</div>
+				</div>
+				<div className="absolute inset-0 flex items-center justify-center pointer-events-none">
+					{isRecommended && subject.subject_info.activated === false ? (
+						<span className="bg-red-500 text-white font-bold px-3 py-1 rounded-full shadow-lg text-xs transition-opacity duration-300 z-10">
+							Никогаш не бил активиран!
+						</span>
+					) : isFirst ? (
+						<span className="bg-blue-600 text-white font-bold px-3 py-1 rounded-full shadow-lg text-xs transition-opacity duration-300 z-10">
+							Најсоодветен!
+						</span>
+					) : null}
+				</div>
+				<div className="flex justify-between mt-auto gap-3">
+					<div className="flex items-center gap-2">
+						<button onClick={() => openSubjectDetails(subject)}>
+							<img src="src/assets/eye.svg" className="w-5 h-5" />
+						</button>
+						<FavoriteButton subjectId={subject.id} />
+						{canReview && (
+							<>
+								<LikeButton id={subject.id} />
+								<DislikeButton id={subject.id} />
+							</>
+						)}
+					</div>
+					<div className="flex-1 flex justify-end">
+						<button
+							onClick={() => openSubjectView(subject)}
+							className="flex items-center px-3 py-2 bg-blue-600 hover:bg-blue-900 text-white text-sm font-medium rounded-md transition-colors"
+						>
+							<img src="src/assets/open.svg" className="w-4 h-4 mr-1" />
+							Отвори предмет
+						</button>
+					</div>
+				</div>
+			</div>
+		</div>
+	);
+};
+
+export default SubjectCard;
Index: frontend/src/components/SubjectCatalog/SubjectCatalog.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SubjectCatalog.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/components/SubjectCatalog/SubjectCatalog.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -85,5 +85,5 @@
 			<h1 className="text-3xl font-bold mb-6">Преглед на сите предмети</h1>
 			<div className="flex flex-col md:flex-row gap-6">
-				<div className="w-full md:w-64 bg-gray-50 p-4 rounded-lg">
+				<div className="w-full md:w-64 bg-gray-50 p-4 rounded-xl shadow-md border border-gray-200 h-max">
 					<FilterSidebar
 						setSearchTerm={setSearchTerm}
@@ -103,5 +103,5 @@
 				</div>
 
-				<div className="flex-1">
+				<div className="flex-1 bg-gray-50 rounded-xl shadow-md border border-gray-200 p-6">
 					<div className="mb-6 relative">
 						<input
Index: frontend/src/components/SubjectCatalog/SubjectList.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SubjectList.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/components/SubjectCatalog/SubjectList.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -1,5 +1,5 @@
 import { useNavigate } from "react-router-dom";
 import { Subject } from "../types";
-import FavoriteButton from "./FavoriteButton";
+import SubjectCard from "./SubjectCard";
 
 interface SubjectListProps {
@@ -8,4 +8,5 @@
 	openSubjectDetails: (subject: Subject) => void;
 	from: string;
+	canReview?: boolean;
 }
 
@@ -15,4 +16,5 @@
 	openSubjectDetails,
 	from,
+	canReview = false,
 }: SubjectListProps) => {
 	const navigate = useNavigate();
@@ -25,44 +27,11 @@
 		<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
 			{filteredSubjects.slice(0, visibleCourses).map((subject) => (
-				<div
+				<SubjectCard
 					key={subject.id}
-					className="border border-gray-200 bg-white rounded-lg overflow-hidden shadow-sm hover:shadow-md transition-shadow duration-200"
-				>
-					<div className="p-4 min-h-full flex flex-col gap-1">
-						<div className="flex justify-between items-start mb-8">
-							<div>
-								<h3 className="text-lg font-semibold">{subject.name}</h3>
-								<p className="text-gray-600">{subject.code}</p>
-							</div>
-						</div>
-						{/* <div className="flex flex-wrap gap-2 mb-4">
-							{subject.subject_info.tags.map((tag) => (
-								<span
-									key={tag}
-									className="bg-green-100 border-green-300 text-green-800 text-xs px-2 py-1 rounded"
-								>
-									{tag}
-								</span>
-							))}
-						</div> */}
-						<div className="flex justify-between mt-auto gap-3">
-							<div className="flex items-center gap-2">
-								<button onClick={() => openSubjectDetails(subject)}>
-									<img src="src/assets/eye.svg" className="w-5 h-5" />
-								</button>
-								<FavoriteButton subjectId={subject.id} />
-							</div>
-							<div className="flex-1 flex justify-end">
-								<button
-									onClick={() => openSubjectView(subject)}
-									className="flex items-center px-3 py-2 bg-blue-600 hover:bg-blue-900 text-white text-sm font-medium rounded-md transition-colors"
-								>
-									<img src="src/assets/open.svg" className="w-4 h-4 mr-1" />
-									Отвори предмет
-								</button>
-							</div>
-						</div>
-					</div>
-				</div>
+					subject={subject}
+					openSubjectDetails={openSubjectDetails}
+					openSubjectView={openSubjectView}
+					canReview={canReview}
+				/>
 			))}
 		</div>
Index: frontend/src/components/SubjectCatalog/utils.ts
===================================================================
--- frontend/src/components/SubjectCatalog/utils.ts	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/components/SubjectCatalog/utils.ts	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -177,5 +177,5 @@
 export const getSubjectPrerequisites = (
 	subject: Subject,
-	subjectMap: Map<number, string>
+	subjectMap: Map<number, string> | undefined
 ): "Нема предуслов" | number | string => {
 	const prerequisite = subject?.subject_info?.prerequisite;
@@ -184,5 +184,5 @@
 	if ("subjects" in prerequisite && Array.isArray(prerequisite.subjects)) {
 		const names = prerequisite.subjects.map(
-			(id) => subjectMap.get(id) || "Непознат предмет"
+			(id) => subjectMap?.get(id) || "Непознат предмет"
 		);
 		return names.length > 0 ? names.join(" или ") : "Нема предуслов";
Index: ontend/src/pages/FavoriteSubjects.tsx
===================================================================
--- frontend/src/pages/FavoriteSubjects.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ 	(revision )
@@ -1,104 +1,0 @@
-import { useEffect, useMemo, useState } from "react";
-import SkeletonCard from "../components/SubjectCatalog/SkeletonCard";
-import SubjectList from "../components/SubjectCatalog/SubjectList";
-import SubjectModal from "../components/SubjectCatalog/SubjectModal";
-import { getSubjectPrerequisites } from "../components/SubjectCatalog/utils";
-import { Subject } from "../components/types";
-import { usePreferences } from "../context/PreferencesContext";
-import { useSubjects } from "../context/SubjectsContext";
-
-const FavoriteSubjects = () => {
-	const [subjects] = useSubjects();
-	const { favoriteIds } = usePreferences();
-	const [visibleCourses, setVisibleCourses] = useState<number>(12);
-	const [selectedSubject, setSelectedSubject] = useState<Subject | null>(null);
-	const [isLoaded, setIsLoaded] = useState(false);
-	const [showModal, setShowModal] = useState(false);
-
-	useEffect(() => {
-		if (subjects && subjects.length > 0) {
-			setIsLoaded(true);
-		}
-	}, [subjects]);
-
-	const favoriteIDsToMap = useMemo(() => {
-		const map = new Map<number, string>();
-		subjects.forEach((subject) => {
-			if (favoriteIds.has(subject.id)) {
-				map.set(subject.id, subject.name);
-			}
-		});
-		return map;
-	}, [subjects, favoriteIds]);
-
-	const favoriteSubjects = useMemo(() => {
-		return subjects.filter((subject) => favoriteIds.has(subject.id));
-	}, [subjects, favoriteIds]);
-
-	const loadMore = () => {
-		setVisibleCourses((prev) => prev + 12);
-	};
-
-	const openSubjectDetails = (subject: Subject) => {
-		setSelectedSubject(subjects.find((item) => item.id == subject.id) ?? null);
-		setShowModal(true);
-	};
-
-	const closeModal = () => {
-		setShowModal(false);
-	};
-
-	return (
-		<div className="mx-auto p-4 bg-white min-h-[83vh]">
-			{favoriteSubjects.length > 0 && (
-				<div className="mb-8 flex">
-					<h3 className="text-3xl font-bold text-gray-900 mb-2">
-						Омилени предмети
-					</h3>
-				</div>
-			)}
-
-			<div className="flex flex-col md:flex-row gap-6 bg-gray-50 p-3 rounded">
-				<div className="flex-1">
-					{!isLoaded ? (
-						<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
-							{[...Array(9)].map((_, index) => (
-								<SkeletonCard key={index} />
-							))}
-						</div>
-					) : (
-						<SubjectList
-							filteredSubjects={favoriteSubjects}
-							visibleCourses={visibleCourses}
-							openSubjectDetails={openSubjectDetails}
-							from="favorite-subjects"
-						/>
-					)}
-
-					{isLoaded && favoriteSubjects.length > visibleCourses && (
-						<div className="mt-5 text-center">
-							<button
-								onClick={loadMore}
-								className="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded-lg font-medium transition-all duration-200 hover:scale-105 hover:shadow-lg"
-							>
-								Погледни повеќе
-							</button>
-						</div>
-					)}
-				</div>
-			</div>
-			{showModal && selectedSubject && (
-				<SubjectModal
-					selectedSubject={selectedSubject}
-					closeModal={closeModal}
-					subjectPrerequisites={getSubjectPrerequisites(
-						selectedSubject,
-						favoriteIDsToMap
-					)}
-				/>
-			)}
-		</div>
-	);
-};
-
-export default FavoriteSubjects;
Index: frontend/src/pages/Login.tsx
===================================================================
--- frontend/src/pages/Login.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/pages/Login.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -68,5 +68,5 @@
 	};
 	return (
-		<div className="flex flex-col items-center justify-center h-[85vh] bg-white">
+		<div className="flex flex-col items-center justify-center h-[83vh] bg-white">
 			<form
 				onSubmit={handleLogin}
Index: frontend/src/pages/Recommendations.tsx
===================================================================
--- frontend/src/pages/Recommendations.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/pages/Recommendations.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -1,7 +1,5 @@
 import { useMemo, useState } from "react";
 import { useNavigate } from "react-router-dom";
-import DislikeButton from "../components/Recommendations/DislikeButton";
-import LikeButton from "../components/Recommendations/LikeButton";
-import FavoriteButton from "../components/SubjectCatalog/FavoriteButton";
+import SubjectCard from "../components/SubjectCatalog/SubjectCard";
 import SubjectModal from "../components/SubjectCatalog/SubjectModal";
 import { getSubjectPrerequisites } from "../components/SubjectCatalog/utils";
@@ -181,5 +179,5 @@
 										<div
 											key={subject.id}
-											className={`h-56 border border-gray-200 rounded-lg overflow-hidden shadow-sm hover:shadow-md transition-shadow duration-200 relative ${
+											className={`border border-gray-200 rounded-lg overflow-hidden shadow-sm hover:shadow-md transition-shadow duration-200 relative ${
 												index % 2 === 0 ? "self-start" : "self-end"
 											}`}
@@ -192,52 +190,12 @@
 											}}
 										>
-											<div className="p-4 min-h-full flex flex-col gap-1">
-												<div className="flex justify-between items-start mb-2">
-													<div>
-														<h3 className="text-lg font-semibold">
-															{subject.name}
-														</h3>
-														<p className="text-gray-600">{subject.code}</p>
-													</div>
-												</div>
-
-												<div className="absolute inset-0 flex items-center justify-center pointer-events-none">
-													{subject.subject_info.activated === false ? (
-														<span className="bg-red-500 text-white font-bold px-3 py-1 rounded-full shadow-lg text-xs transition-opacity duration-300 z-10">
-															Никогаш не бил активиран!
-														</span>
-													) : index === 0 ? (
-														<span className="bg-blue-600 text-white font-bold px-3 py-1 rounded-full shadow-lg text-xs transition-opacity duration-300 z-10">
-															Најсоодветен!
-														</span>
-													) : null}
-												</div>
-
-												<div className="flex justify-between mt-auto gap-3">
-													<div className="flex items-center gap-2">
-														<button onClick={() => openSubjectDetails(subject)}>
-															<img
-																src="src/assets/eye.svg"
-																className="w-5 h-5"
-															/>
-														</button>
-														<FavoriteButton subjectId={subject.id} />
-														<LikeButton id={subject.id} />
-														<DislikeButton id={subject.id} />
-													</div>
-													<div className="flex-1 flex justify-end">
-														<button
-															onClick={() => openSubjectView(subject)}
-															className="flex items-center px-3 py-2 bg-blue-600 hover:bg-blue-900 text-white text-sm font-medium rounded-md transition-colors"
-														>
-															<img
-																src="src/assets/open.svg"
-																className="w-4 h-4 mr-1"
-															/>
-															Отвори предмет
-														</button>
-													</div>
-												</div>
-											</div>
+											<SubjectCard
+												subject={subject}
+												openSubjectDetails={openSubjectDetails}
+												openSubjectView={openSubjectView}
+												canReview={true}
+												isFirst={index == 0}
+												isRecommended={true}
+											/>
 										</div>
 									))}
Index: frontend/src/pages/Register.tsx
===================================================================
--- frontend/src/pages/Register.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/pages/Register.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -80,5 +80,5 @@
 	};
 	return (
-		<div className="flex flex-col items-center justify-center h-[85vh] bg-white">
+		<div className="flex flex-col items-center justify-center h-[83vh] bg-white">
 			<form
 				onSubmit={handleRegister}
Index: frontend/src/pages/SubjectPreferences.tsx
===================================================================
--- frontend/src/pages/SubjectPreferences.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
+++ frontend/src/pages/SubjectPreferences.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -0,0 +1,203 @@
+import { useEffect, useState } from "react";
+import SkeletonCard from "../components/SubjectCatalog/SkeletonCard";
+import SubjectList from "../components/SubjectCatalog/SubjectList";
+import SubjectModal from "../components/SubjectCatalog/SubjectModal";
+import { getSubjectPrerequisites } from "../components/SubjectCatalog/utils";
+import { Subject } from "../components/types";
+import { usePreferences } from "../context/PreferencesContext";
+import { useSubjects } from "../context/SubjectsContext";
+
+const SubjectPreferences = () => {
+	const [subjects] = useSubjects();
+	const { favoriteIds, likedIds, dislikedIds } = usePreferences();
+	const [visibleCourses, setVisibleCourses] = useState<number>(12);
+	const [selectedSubject, setSelectedSubject] = useState<Subject | null>(null);
+	const [isLoaded, setIsLoaded] = useState(false);
+	const [showModal, setShowModal] = useState(false);
+	const [selectedSubjects, setSelectedSubjects] = useState<Subject[]>([]);
+	const [idsToMap, setIdsToMap] = useState<Map<number, string>>();
+	const [activeFilter, setActiveFilter] = useState<
+		"favorite" | "liked" | "disliked"
+	>("favorite");
+
+	// Helper functions
+	const favoriteIDsToMap = () => {
+		const map = new Map<number, string>();
+		subjects.forEach((subject) => {
+			if (favoriteIds.has(subject.id)) {
+				map.set(subject.id, subject.name);
+			}
+		});
+		return map;
+	};
+
+	const likedIDsToMap = () => {
+		const map = new Map<number, string>();
+		subjects.forEach((subject) => {
+			if (likedIds.has(subject.id)) {
+				map.set(subject.id, subject.name);
+			}
+		});
+		return map;
+	};
+
+	const dislikedIDsToMap = () => {
+		const map = new Map<number, string>();
+		subjects.forEach((subject) => {
+			if (dislikedIds.has(subject.id)) {
+				map.set(subject.id, subject.name);
+			}
+		});
+		return map;
+	};
+
+	const favoriteSubjects = () => {
+		return subjects.filter((subject) => favoriteIds.has(subject.id));
+	};
+
+	const likedSubjects = () => {
+		return subjects.filter((subject) => likedIds.has(subject.id));
+	};
+
+	const dislikedSubjects = () => {
+		return subjects.filter((subject) => dislikedIds.has(subject.id));
+	};
+
+	useEffect(() => {
+		let newSubjects: Subject[] = [];
+		let newMap: Map<number, string> = new Map();
+		switch (activeFilter) {
+			case "favorite":
+				newSubjects = favoriteSubjects();
+				newMap = favoriteIDsToMap();
+				break;
+			case "liked":
+				newSubjects = likedSubjects();
+				newMap = likedIDsToMap();
+				break;
+			case "disliked":
+				newSubjects = dislikedSubjects();
+				newMap = dislikedIDsToMap();
+				break;
+		}
+		setSelectedSubjects(newSubjects);
+		setIdsToMap(newMap);
+		setIsLoaded(true);
+	}, [favoriteIds, likedIds, dislikedIds, activeFilter, subjects]);
+
+	const loadMore = () => {
+		setVisibleCourses((prev) => prev + 12);
+	};
+
+	const openSubjectDetails = (subject: Subject) => {
+		setSelectedSubject(subjects.find((item) => item.id == subject.id) ?? null);
+		setShowModal(true);
+	};
+
+	const closeModal = () => {
+		setShowModal(false);
+	};
+
+	const handleFilterClick = (filterType: "favorite" | "liked" | "disliked") => {
+		setActiveFilter(filterType);
+		setVisibleCourses(12); // Reset visible courses when switching filters
+	};
+
+	return (
+		<div className="min-h-[83vh] bg-white p-4">
+			<h1 className="text-3xl font-bold">Мои предмети</h1>
+			<div className="py-6">
+				<div className="flex flex-col lg:flex-row gap-5">
+					<div className="lg:w-64 flex-shrink-0">
+						<div className="bg-gray-50 rounded-xl shadow-md border border-gray-200 p-4">
+							<h2 className="text-lg font-semibold text-gray-900 mb-6">
+								Филтри
+							</h2>
+							<div className="space-y-3">
+								<button
+									className={`w-full py-3 px-4 rounded-lg font-medium transition-all duration-200 ${
+										activeFilter === "favorite"
+											? "bg-blue-600 text-white shadow-md"
+											: "bg-gray-100 text-gray-700 hover:bg-gray-200"
+									}`}
+									onClick={() => handleFilterClick("favorite")}
+								>
+									Омилени предмети
+								</button>
+								<button
+									className={`w-full py-3 px-4 rounded-lg font-medium transition-all duration-200 ${
+										activeFilter === "liked"
+											? "bg-blue-600 text-white shadow-md"
+											: "bg-gray-100 text-gray-700 hover:bg-gray-200"
+									}`}
+									onClick={() => handleFilterClick("liked")}
+								>
+									Позитивни оценки
+								</button>
+								<button
+									className={`w-full py-3 px-4 rounded-lg font-medium transition-all duration-200 ${
+										activeFilter === "disliked"
+											? "bg-blue-600 text-white shadow-md"
+											: "bg-gray-100 text-gray-700 hover:bg-gray-200"
+									}`}
+									onClick={() => handleFilterClick("disliked")}
+								>
+									Негативни оценки
+								</button>
+							</div>
+						</div>
+					</div>
+
+					<div className="flex-1 mr-4">
+						<div className="bg-gray-50 rounded-xl shadow-md border border-gray-200 p-6">
+							{!isLoaded ? (
+								<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
+									{[...Array(9)].map((_, index) => (
+										<SkeletonCard key={index} />
+									))}
+								</div>
+							) : selectedSubjects.length === 0 ? (
+								<div className="text-center text-gray-500 py-44">
+									Нема предмети за прикажување со избраниот филтер.
+								</div>
+							) : (
+								<>
+									<SubjectList
+										filteredSubjects={selectedSubjects}
+										visibleCourses={visibleCourses}
+										openSubjectDetails={openSubjectDetails}
+										from="favorite-subjects"
+										canReview={activeFilter !== "favorite"}
+									/>
+									{selectedSubjects.length > visibleCourses && (
+										<div className="mt-8 text-center">
+											<button
+												onClick={loadMore}
+												className="bg-blue-600 hover:bg-blue-700 text-white px-8 py-3 rounded-lg font-medium transition-all duration-200 hover:scale-105 hover:shadow-lg"
+											>
+												Погледни повеќе
+											</button>
+										</div>
+									)}
+								</>
+							)}
+						</div>
+					</div>
+				</div>
+			</div>
+
+			{showModal && selectedSubject && (
+				<SubjectModal
+					selectedSubject={selectedSubject}
+					closeModal={closeModal}
+					subjectPrerequisites={getSubjectPrerequisites(
+						selectedSubject,
+						idsToMap
+					)}
+				/>
+			)}
+		</div>
+	);
+};
+
+export default SubjectPreferences;
Index: frontend/src/pages/SubjectView.tsx
===================================================================
--- frontend/src/pages/SubjectView.tsx	(revision 5c50b04ac5c182dfc4023a59711ea23503d99e8e)
+++ frontend/src/pages/SubjectView.tsx	(revision 491a010119327425022533a785e12978d064bcaa)
@@ -72,5 +72,5 @@
 	if (!selectedSubject) {
 		return (
-			<div className="flex flex-col items-center justify-center min-h-[85vh] bg-white text-center">
+			<div className="flex flex-col items-center justify-center min-h-[83vh] bg-white text-center">
 				<p className="block">Предметот со код '{code}' не е пронајден.</p>
 				<p>
