Index: backend/auth_form/migrations/0018_student_disliked_subjects_student_liked_subjects.py
===================================================================
--- backend/auth_form/migrations/0018_student_disliked_subjects_student_liked_subjects.py	(revision 77901201e9f51078c422b3061c48926d113882fd)
+++ backend/auth_form/migrations/0018_student_disliked_subjects_student_liked_subjects.py	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -0,0 +1,24 @@
+# Generated by Django 5.1.7 on 2025-06-15 17:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('auth_form', '0017_student_favorite_subjects'),
+        ('subjects', '0002_subject_info_evaluation_subject_info_is_easy_and_more'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='student',
+            name='disliked_subjects',
+            field=models.ManyToManyField(blank=True, related_name='disliked_subjects', to='subjects.subject'),
+        ),
+        migrations.AddField(
+            model_name='student',
+            name='liked_subjects',
+            field=models.ManyToManyField(blank=True, related_name='liked_subjects', to='subjects.subject'),
+        ),
+    ]
Index: backend/auth_form/models.py
===================================================================
--- backend/auth_form/models.py	(revision ad9b02260a77e6ee14e92636da6985c46453e71b)
+++ backend/auth_form/models.py	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -65,4 +65,6 @@
     assistants = ArrayField(models.CharField(max_length=64), null=True, blank=True)
     passed_subjects = models.ManyToManyField('subjects.subject', related_name="passed_subjects", blank=True)
+    liked_subjects = models.ManyToManyField('subjects.subject', related_name="liked_subjects", blank=True)
+    disliked_subjects = models.ManyToManyField('subjects.subject', related_name="disliked_subjects", blank=True)
     has_extracurricular = models.BooleanField(default=False, null=True)
     total_credits = models.PositiveIntegerField(null=True)
Index: backend/backend/urls.py
===================================================================
--- backend/backend/urls.py	(revision ad9b02260a77e6ee14e92636da6985c46453e71b)
+++ backend/backend/urls.py	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -17,5 +17,5 @@
 from django.contrib import admin
 from django.urls import path, include
-from subjects.views import index, all_subjects, get_suggestions, ToggleFavoriteSubjectView, FavoriteSubjectsView
+from subjects.views import index, all_subjects, get_suggestions, ToggleSubjectPreferences, PreferencesView
 
 urlpatterns = [
@@ -23,7 +23,6 @@
     path('subjects/', all_subjects),
     path('suggestion/', get_suggestions),
-    path('student/favorites/', FavoriteSubjectsView.as_view(), name='student-favorites'),
-    path('student/toggle-favorite/', ToggleFavoriteSubjectView.as_view(), name='student-toggle-favorite'),
-    # path('subjects/<str:code>/', subject_view),
+    path('student/preferences/', PreferencesView.as_view(), name='student-preferences'),
+    path('student/toggle-subject-pref/', ToggleSubjectPreferences.as_view(), name='student-toggle-favorite'),
     path('auth/', include('auth_form.urls')),
     path('', index),
Index: backend/subjects/views.py
===================================================================
--- backend/subjects/views.py	(revision ad9b02260a77e6ee14e92636da6985c46453e71b)
+++ backend/subjects/views.py	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -61,5 +61,5 @@
         
 
-class FavoriteSubjectsView(APIView):
+class PreferencesView(APIView):
     permission_classes = [IsAuthenticated]
 
@@ -69,9 +69,11 @@
             # .values_list('id', flat=True) is very efficient
             favorite_ids = list(student.favorite_subjects.all().values_list('id', flat=True))
-            return Response({'favorite_ids': favorite_ids}, status=status.HTTP_200_OK)
+            liked_ids = list(student.liked_subjects.all().values_list('id', flat=True))
+            disliked_ids = list(student.disliked_subjects.all().values_list('id', flat=True))
+            return Response({'favorite_ids': favorite_ids, 'liked_ids': liked_ids, 'disliked_ids': disliked_ids}, status=status.HTTP_200_OK)
         except Exception as e:
             return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
         
-class ToggleFavoriteSubjectView(APIView):
+class ToggleSubjectPreferences(APIView):
     """
     Toggles the favorite status of a subject for the authenticated user.
@@ -81,4 +83,5 @@
     def post(self, request, *args, **kwargs):
         subject_id = request.data.get('subject_id')
+        action_type = request.data.get('action_type') 
         if not subject_id:
             return Response({"message": "Subject ID is required"}, status=status.HTTP_400_BAD_REQUEST)
@@ -88,11 +91,29 @@
             subject = Subject.objects.get(id=subject_id)
 
-            if subject in student.favorite_subjects.all():
-                student.favorite_subjects.remove(subject)
-                action = 'removed'
-            else:
-                student.favorite_subjects.add(subject)
-                action = 'added'
+            if action_type not in ['favorite', 'liked', 'disliked']:
+                return Response({"message": "Invalid action type. Use 'favorite', 'liked', or 'disliked'."}, status=status.HTTP_400_BAD_REQUEST)
             
+            if action_type == 'favorite':
+                if subject in student.favorite_subjects.all():
+                    student.favorite_subjects.remove(subject)
+                    action = 'removed'
+                else:
+                    student.favorite_subjects.add(subject)
+                    action = 'added'
+            elif action_type == 'liked':
+                if subject in student.liked_subjects.all():
+                    student.liked_subjects.remove(subject)
+                    action = 'removed'
+                else:
+                    student.liked_subjects.add(subject)
+                    action = 'added'
+            elif action_type == 'disliked':
+                if subject in student.disliked_subjects.all():
+                    student.disliked_subjects.remove(subject)
+                    action = 'removed'
+                else:
+                    student.disliked_subjects.add(subject)
+                    action = 'added'
+                
             return Response({
                 'status': 'success',
Index: frontend/src/components/Recommendations/DislikeButton.tsx
===================================================================
--- frontend/src/components/Recommendations/DislikeButton.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
+++ frontend/src/components/Recommendations/DislikeButton.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -0,0 +1,23 @@
+import { ThumbsDown } from "lucide-react";
+import { usePreferences } from "../../context/PreferencesContext";
+import { SubjectID } from "../types";
+
+interface DislikeButtonProps {
+	id: SubjectID;
+}
+
+const DislikeButton = ({ id }: DislikeButtonProps) => {
+	const { dislikedIds, toggleDislike } = usePreferences();
+	return (
+		<button
+			onClick={() => toggleDislike(id)}
+			className={`p-1 hover:bg-green-100 rounded transition-colors group ${
+				dislikedIds.has(id) ? "text-red-600 bg-red-100" : "text-gray-400"
+			}`}
+		>
+			<ThumbsDown className="group-hover:text-red-600 transition-colors" />
+		</button>
+	);
+};
+
+export default DislikeButton;
Index: frontend/src/components/Recommendations/LikeButton.tsx
===================================================================
--- frontend/src/components/Recommendations/LikeButton.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
+++ frontend/src/components/Recommendations/LikeButton.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -0,0 +1,23 @@
+import { ThumbsUp } from "lucide-react";
+import { usePreferences } from "../../context/PreferencesContext";
+import { SubjectID } from "../types";
+
+interface LikeButtonProps {
+	id: SubjectID;
+}
+
+const LikeButton = ({ id }: LikeButtonProps) => {
+	const { likedIds, toggleLike } = usePreferences();
+	return (
+		<button
+			onClick={() => toggleLike(id)}
+			className={`p-1 hover:bg-green-100 rounded transition-colors group ${
+				likedIds.has(id) ? "text-green-600 bg-green-100" : "text-gray-400"
+			}`}
+		>
+			<ThumbsUp className="group-hover:text-green-600 transition-colors" />
+		</button>
+	);
+};
+
+export default LikeButton;
Index: frontend/src/components/SubjectCatalog/FavoriteButton.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/FavoriteButton.tsx	(revision ad9b02260a77e6ee14e92636da6985c46453e71b)
+++ frontend/src/components/SubjectCatalog/FavoriteButton.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -1,30 +1,43 @@
-import { useFavorites } from '../../context/FavoritesContext'; 
-import { useAuth } from '../../hooks/useAuth';
+import { usePreferences } from "../../context/PreferencesContext";
+import { useAuth } from "../../hooks/useAuth";
 
 const HeartIcon = ({ filled }: { filled: boolean }) => (
-    <svg xmlns="http://www.w3.org/2000/svg" className="h-7 w-7" fill={filled ? 'currentColor' : 'none'} viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
-        <path strokeLinecap="round" strokeLinejoin="round" d="M4.318 6.318a4.5 4.5 0 016.364 0L12 7.636l1.318-1.318a4.5 4.5 0 116.364 6.364L12 20.364l-7.682-7.682a4.5 4.5 0 010-6.364z" />
-    </svg>
+	<svg
+		xmlns="http://www.w3.org/2000/svg"
+		className="h-7 w-7"
+		fill={filled ? "currentColor" : "none"}
+		viewBox="0 0 24 24"
+		stroke="currentColor"
+		strokeWidth={2}
+	>
+		<path
+			strokeLinecap="round"
+			strokeLinejoin="round"
+			d="M4.318 6.318a4.5 4.5 0 016.364 0L12 7.636l1.318-1.318a4.5 4.5 0 116.364 6.364L12 20.364l-7.682-7.682a4.5 4.5 0 010-6.364z"
+		/>
+	</svg>
 );
 
 interface FavoriteButtonProps {
-    subjectId: number;
+	subjectId: number;
 }
 
 const FavoriteButton = ({ subjectId }: FavoriteButtonProps) => {
-    const { favoriteIds, toggleFavorite, isLoading } = useFavorites();
-    const { isAuthenticated } = useAuth(); 
-    const isFavorite = favoriteIds.has(subjectId);
+	const { favoriteIds, toggleFavorite, isLoading } = usePreferences();
+	const { isAuthenticated } = useAuth();
+	const isFavorite = favoriteIds.has(subjectId);
 
-    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' : ''}`}
-            aria-label={isFavorite ? 'Unfavorite' : 'Favorite'}
-        >
-            <HeartIcon filled={isFavorite} />
-        </button>
-    );
+	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" : ""}`}
+			aria-label={isFavorite ? "Unfavorite" : "Favorite"}
+		>
+			<HeartIcon filled={isFavorite} />
+		</button>
+	);
 };
 
Index: ontend/src/context/FavoritesContext.tsx
===================================================================
--- frontend/src/context/FavoritesContext.tsx	(revision ad9b02260a77e6ee14e92636da6985c46453e71b)
+++ 	(revision )
@@ -1,72 +1,0 @@
-import { createContext, useContext, useState, useEffect, ReactNode, useCallback } from 'react';
-import { useAuth } from '../hooks/useAuth'; 
-import useAxiosAuth from '../hooks/useAxiosAuth';
-import { toast } from 'react-toastify';
-interface FavoritesContextType {
-    favoriteIds: Set<number>; 
-    toggleFavorite: (subjectId: number) => Promise<void>;
-    isLoading: boolean;
-}
-
-const FavoritesContext = createContext<FavoritesContextType | undefined>(undefined);
-
-export const FavoritesProvider = ({ children }: { children: ReactNode }) => {
-    const { accessToken } = useAuth(); 
-    const axiosAuth = useAxiosAuth();
-    const [isLoading, setIsLoading] = useState(true);
-    const [favoriteIds, setFavoriteIds] = useState<Set<number>>(new Set());
-
-     useEffect(() => {
-        if (accessToken) {
-            setIsLoading(true);
-            axiosAuth.get<{ favorite_ids: number[] }>('/student/favorites/')
-                .then(response => {
-                    setFavoriteIds(new Set(response.data.favorite_ids));
-                })
-                .catch(error => console.error("Failed to fetch favorites:", error))
-                .finally(() => setIsLoading(false));
-        } else {
-            // If user logs out, clear the favorites
-            setFavoriteIds(new Set());
-            setIsLoading(false);
-        }
-    }, [accessToken, axiosAuth]);
-
-     const toggleFavorite = useCallback(async (subjectId: number) => {
-        // Optimistic UI update
-        const originalFavorites = new Set(favoriteIds);
-        setFavoriteIds(prevIds => {
-            const newIds = new Set(prevIds);
-            if (newIds.has(subjectId)) {
-                newIds.delete(subjectId);
-            } else {
-                newIds.add(subjectId);
-            }
-            return newIds;
-        });
-
-        try {
-            await axiosAuth.post('/student/toggle-favorite/', { subject_id: subjectId });
-        } catch (error) {
-            console.error('Failed to toggle favorite, reverting.', error);
-            setFavoriteIds(originalFavorites); // Revert on error
-            toast.error("Мора да си најавен за да додадеш предмет во омилени.");
-        }
-    }, [axiosAuth, favoriteIds]);
-
-    const value = { favoriteIds, toggleFavorite, isLoading };
-
-    return (
-        <FavoritesContext.Provider value={value}>
-            {children}
-        </FavoritesContext.Provider>
-    );
-};
-
-export const useFavorites = () => {
-    const context = useContext(FavoritesContext);
-    if (context === undefined) {
-        throw new Error('useFavorites must be used within a FavoritesProvider');
-    }
-    return context;
-};
Index: frontend/src/context/PreferencesContext.tsx
===================================================================
--- frontend/src/context/PreferencesContext.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
+++ frontend/src/context/PreferencesContext.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -0,0 +1,188 @@
+import {
+	createContext,
+	ReactNode,
+	useCallback,
+	useContext,
+	useEffect,
+	useState,
+} from "react";
+import { toast } from "react-toastify";
+import { useAuth } from "../hooks/useAuth";
+import useAxiosAuth from "../hooks/useAxiosAuth";
+interface PreferencesContextType {
+	favoriteIds: Set<number>;
+	likedIds: Set<number>;
+	dislikedIds: Set<number>;
+	toggleFavorite: (subjectId: number) => Promise<void>;
+	toggleLike: (subjectId: number) => Promise<void>;
+	toggleDislike: (subjectId: number) => Promise<void>;
+	isLoading: boolean;
+}
+
+const PreferencesContext = createContext<PreferencesContextType | undefined>(
+	undefined
+);
+
+export const PreferencesProvider = ({ children }: { children: ReactNode }) => {
+	const { accessToken } = useAuth();
+	const axiosAuth = useAxiosAuth();
+	const [isLoading, setIsLoading] = useState(true);
+	const [favoriteIds, setFavoriteIds] = useState<Set<number>>(new Set());
+	const [likedIds, setLikedIds] = useState<Set<number>>(new Set());
+	const [dislikedIds, setDislikedIds] = useState<Set<number>>(new Set());
+
+	useEffect(() => {
+		if (accessToken) {
+			setIsLoading(true);
+			axiosAuth
+				.get<{
+					favorite_ids: number[];
+					liked_ids: number[];
+					disliked_ids: number[];
+				}>("/student/preferences/")
+				.then((response) => {
+					setFavoriteIds(new Set(response.data.favorite_ids || []));
+					setLikedIds(new Set(response.data.liked_ids || []));
+					setDislikedIds(new Set(response.data.disliked_ids || []));
+				})
+				.catch((error) => console.error("Failed to fetch preferences:", error))
+				.finally(() => setIsLoading(false));
+		} else {
+			// If user logs out, clear preferences
+			setFavoriteIds(new Set());
+			setLikedIds(new Set());
+			setDislikedIds(new Set());
+			setIsLoading(false);
+		}
+	}, [accessToken, axiosAuth]);
+
+	const toggleFavorite = useCallback(
+		async (subjectId: number) => {
+			// Optimistic UI update
+			const originalFavorites = new Set(favoriteIds);
+			setFavoriteIds((prevIds) => {
+				const newIds = new Set(prevIds);
+				if (newIds.has(subjectId)) {
+					newIds.delete(subjectId);
+				} else {
+					newIds.add(subjectId);
+				}
+				return newIds;
+			});
+
+			try {
+				await axiosAuth.post("/student/toggle-subject-pref/", {
+					subject_id: subjectId,
+					action_type: "favorite",
+				});
+			} catch (error) {
+				console.error("Failed to toggle favorite, reverting.", error);
+				setFavoriteIds(originalFavorites); // Revert on error
+				toast.error("Мора да си најавен за да додадеш предмет во омилени.");
+			}
+		},
+		[axiosAuth, favoriteIds]
+	);
+
+	const toggleLike = useCallback(
+		async (subjectId: number) => {
+			const wasDisliked = dislikedIds.has(subjectId);
+			if (wasDisliked) {
+				const newDisliked = new Set(dislikedIds);
+				newDisliked.delete(subjectId);
+				setDislikedIds(newDisliked);
+			}
+			const originalLiked = new Set(likedIds);
+			setLikedIds((prevIds) => {
+				const newIds = new Set(prevIds);
+				if (newIds.has(subjectId)) {
+					newIds.delete(subjectId);
+				} else {
+					newIds.add(subjectId);
+				}
+				return newIds;
+			});
+
+			try {
+				await axiosAuth.post("/student/toggle-subject-pref/", {
+					subject_id: subjectId,
+					action_type: "liked",
+				});
+				if (wasDisliked) {
+					await axiosAuth.post("/student/toggle-subject-pref/", {
+						subject_id: subjectId,
+						action_type: "disliked",
+					});
+				}
+			} catch (error) {
+				console.error("Failed to toggle liked, reverting.", error);
+				setLikedIds(originalLiked);
+				toast.error("Мора да си најавен за да додадеш оценка на препорака.");
+			}
+		},
+		[axiosAuth, likedIds]
+	);
+
+	const toggleDislike = useCallback(
+		async (subjectId: number) => {
+			const wasLiked = likedIds.has(subjectId);
+			if (wasLiked) {
+				const newLiked = new Set(likedIds);
+				newLiked.delete(subjectId);
+				setLikedIds(newLiked);
+			}
+			const originalDisliked = new Set(likedIds);
+			setDislikedIds((prevIds) => {
+				const newIds = new Set(prevIds);
+				if (newIds.has(subjectId)) {
+					newIds.delete(subjectId);
+				} else {
+					newIds.add(subjectId);
+				}
+				return newIds;
+			});
+
+			try {
+				await axiosAuth.post("/student/toggle-subject-pref/", {
+					subject_id: subjectId,
+					action_type: "disliked",
+				});
+				if (wasLiked) {
+					await axiosAuth.post("/student/toggle-subject-pref/", {
+						subject_id: subjectId,
+						action_type: "liked",
+					});
+				}
+			} catch (error) {
+				console.error("Failed to toggle liked, reverting.", error);
+				setDislikedIds(originalDisliked);
+				toast.error("Мора да си најавен за да додадеш лајк на предмет.");
+			}
+		},
+		[axiosAuth, likedIds]
+	);
+
+	const value = {
+		favoriteIds,
+		likedIds,
+		dislikedIds,
+		toggleFavorite,
+		toggleLike,
+		toggleDislike,
+		isLoading,
+	};
+
+	return (
+		<PreferencesContext.Provider value={value}>
+			{children}
+		</PreferencesContext.Provider>
+	);
+};
+
+export const usePreferences = () => {
+	const context = useContext(PreferencesContext);
+	if (context === undefined) {
+		throw new Error("usePreferences must be used within a PreferencesProvider");
+	}
+	return context;
+};
Index: frontend/src/main.tsx
===================================================================
--- frontend/src/main.tsx	(revision ad9b02260a77e6ee14e92636da6985c46453e71b)
+++ frontend/src/main.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -3,7 +3,7 @@
 import App from "./App.tsx";
 import { AuthProvider } from "./context/AuthProvider";
+import { PreferencesProvider } from "./context/PreferencesContext.tsx";
 import { RecommendationsProvider } from "./context/RecommendationsContext.tsx";
 import { SubjectsProvider } from "./context/SubjectsContext.tsx";
-import { FavoritesProvider } from "./context/FavoritesContext.tsx";
 import "./index.css";
 
@@ -13,7 +13,7 @@
 			<SubjectsProvider>
 				<RecommendationsProvider>
-					<FavoritesProvider>
+					<PreferencesProvider>
 						<App />
-					</FavoritesProvider>
+					</PreferencesProvider>
 				</RecommendationsProvider>
 			</SubjectsProvider>
Index: frontend/src/pages/FavoriteSubjects.tsx
===================================================================
--- frontend/src/pages/FavoriteSubjects.tsx	(revision ad9b02260a77e6ee14e92636da6985c46453e71b)
+++ frontend/src/pages/FavoriteSubjects.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -5,10 +5,10 @@
 import { getSubjectPrerequisites } from "../components/SubjectCatalog/utils";
 import { Subject } from "../components/types";
-import { useFavorites } from "../context/FavoritesContext";
+import { usePreferences } from "../context/PreferencesContext";
 import { useSubjects } from "../context/SubjectsContext";
 
 const FavoriteSubjects = () => {
 	const [subjects] = useSubjects();
-	const { favoriteIds } = useFavorites();
+	const { favoriteIds } = usePreferences();
 	const [visibleCourses, setVisibleCourses] = useState<number>(12);
 	const [selectedSubject, setSelectedSubject] = useState<Subject | null>(null);
Index: frontend/src/pages/Recommendations.tsx
===================================================================
--- frontend/src/pages/Recommendations.tsx	(revision ad9b02260a77e6ee14e92636da6985c46453e71b)
+++ frontend/src/pages/Recommendations.tsx	(revision 77901201e9f51078c422b3061c48926d113882fd)
@@ -1,4 +1,6 @@
 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 SubjectModal from "../components/SubjectCatalog/SubjectModal";
@@ -165,5 +167,9 @@
 											: "семестар"}
 									</h2>
-									<div className="w-24 h-1 bg-blue-500 mx-auto rounded-full"></div>
+									<p className="text-gray-500">
+										Помогни ни да ги подобриме алгоритамот со тоа што ќе ги
+										оцениш препораките
+									</p>
+									{/* <div className="w-24 h-1 bg-blue-500 mx-auto rounded-full"></div> */}
 								</div>
 
@@ -217,4 +223,6 @@
 														</button>
 														<FavoriteButton subjectId={subject.id} />
+														<LikeButton id={subject.id} />
+														<DislikeButton id={subject.id} />
 													</div>
 													<div className="flex-1 flex justify-end">
