Index: backend/auth_form/serializers.py
===================================================================
--- backend/auth_form/serializers.py	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ backend/auth_form/serializers.py	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -10,4 +10,9 @@
 
 User = get_user_model()
+
+class UserSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = User
+        fields = ('id', 'user_type', 'full_name')
 
 class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
Index: backend/auth_form/urls.py
===================================================================
--- backend/auth_form/urls.py	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ backend/auth_form/urls.py	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -1,4 +1,4 @@
 from django.urls import path
-from .views import RegisterView, LoginView, StudentFormView
+from .views import RegisterView, LoginView, StudentFormView, UserDetailView
 from rest_framework_simplejwt.views import TokenObtainPairView
 from .serializers import CustomTokenObtainPairSerializer
@@ -10,3 +10,4 @@
     path('refresh/', TokenRefreshView.as_view(), name='token_refresh'),
     path('form/', StudentFormView.as_view(), name="student_form"),
+    path('user/', UserDetailView.as_view(), name='user_detail'),
 ]
Index: backend/auth_form/views.py
===================================================================
--- backend/auth_form/views.py	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ backend/auth_form/views.py	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -1,5 +1,5 @@
 # from .utils import check_prerequisites
 from .models import Student
-from .serializers import RegistrationSerializer, LoginSerializer, StudentFormSerializer
+from .serializers import RegistrationSerializer, LoginSerializer, StudentFormSerializer, UserSerializer
 from rest_framework import serializers, status, views
 from rest_framework.views import APIView
@@ -103,4 +103,11 @@
         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
     
+    
+class UserDetailView(APIView):
+    permission_classes = (IsAuthenticated,)
+
+    def get(self, request):
+        serializer = UserSerializer(request.user)
+        return Response(serializer.data)
 
 
Index: frontend/src/App.tsx
===================================================================
--- frontend/src/App.tsx	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ frontend/src/App.tsx	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -14,4 +14,5 @@
 import Register from "./pages/Register";
 import SubjectView from "./pages/SubjectView";
+import FavoriteSubjects from "./pages/FavoriteSubjects";
 
 const Layout = () => (
@@ -63,4 +64,12 @@
 			},
 			{
+				path: "favorite-subjects",
+				element: (
+					<PrivateRoute>
+						<FavoriteSubjects />
+					</PrivateRoute>
+				),
+			},
+			{
 				path: "subjects/:code",
 				element: <SubjectView />,
Index: frontend/src/components/Navbar.tsx
===================================================================
--- frontend/src/components/Navbar.tsx	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ frontend/src/components/Navbar.tsx	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -127,4 +127,11 @@
 										Препораки
 									</Link>
+									<Link
+										to="/favorite-subjects"
+										className="block px-4 py-2 text-sm hover:bg-gray-100 hover:underline"
+										onClick={() => setMenuOpen(false)}
+									>
+										Омилени предмети
+									</Link>
 
 									<button
@@ -174,4 +181,11 @@
 								Профил
 							</Link>
+							<Link
+								to="/favorite-subjects"
+								className="hover:underline"
+								onClick={() => setMenuOpen(false)}
+							>
+								Омилени предмети
+							</Link>
 							<button
 								onClick={() => {
Index: frontend/src/components/SubjectCatalog/FavoriteButton.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/FavoriteButton.tsx	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ frontend/src/components/SubjectCatalog/FavoriteButton.tsx	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -1,3 +1,4 @@
 import { useFavorites } from '../../context/FavoritesContext'; 
+import { useAuth } from '../../hooks/useAuth';
 
 const HeartIcon = ({ filled }: { filled: boolean }) => (
@@ -13,4 +14,5 @@
 const FavoriteButton = ({ subjectId }: FavoriteButtonProps) => {
     const { favoriteIds, toggleFavorite, isLoading } = useFavorites();
+    const { isAuthenticated } = useAuth(); 
     const isFavorite = favoriteIds.has(subjectId);
 
@@ -18,5 +20,5 @@
         <button
             onClick={() => toggleFavorite(subjectId)}
-            disabled={isLoading}
+            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'}
Index: frontend/src/components/SubjectCatalog/SubjectList.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SubjectList.tsx	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ frontend/src/components/SubjectCatalog/SubjectList.tsx	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -16,7 +16,5 @@
 	const navigate = useNavigate();
 	const openSubjectView = (subject: Subject) => {
-		navigate(`/subjects/${subject.code}`, {
-			state: { from: "/subjects" },
-		});
+		navigate(`/subjects/${subject.code}`);
 	};
 	return (
Index: frontend/src/context/AuthProvider.tsx
===================================================================
--- frontend/src/context/AuthProvider.tsx	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ frontend/src/context/AuthProvider.tsx	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -1,6 +1,12 @@
-import React, { useRef, useState, useEffect, ReactNode, useCallback } from "react";
+import React, {
+	useRef,
+	useState,
+	useEffect,
+	ReactNode,
+	useCallback,
+} from "react";
 import AuthContext, { AuthContextType } from "./AuthContext";
-import axiosInstance from "../api/axiosInstance"; 
-import { jwtDecode } from "jwt-decode"
+import axiosInstance from "../api/axiosInstance";
+import { jwtDecode } from "jwt-decode";
 import { toast } from "react-toastify";
 import { StudentData } from "../components/types";
@@ -8,199 +14,225 @@
 
 interface DecodedToken {
-    exp: number;
-    iat: number;
-    jti: string;
-    token_type: string;
-    user_id: number;
+	exp: number;
+	iat: number;
+	jti: string;
+	token_type: string;
+	user_id: number;
 }
 
 export const AuthProvider: React.FC<{ children: ReactNode }> = ({
-  children,
+	children,
 }) => {
-  const [user, setUser] = useState<User | null>(null);
-  const [accessToken, setAccessToken] = useState<string | null>(
-    localStorage.getItem("access")
-  );
-  const [refreshToken, setRefreshToken] = useState<string | null>(
-    localStorage.getItem("refresh")
-  );
-  const [formData, setFormData] = useState<StudentData | null>(null);
-  const [loading, setLoading] = useState(true); 
-
-  const proactiveRefreshTimeoutId = useRef<number | null>(null);
-  // We cannot use the useAxiosAuth hook here due to the circular dependency.
-  const axiosAuth = axiosInstance;
-
-  // Memoize the refresh function to stabilize dependencies in useEffect
-  const refreshAccessToken = useCallback(async (): Promise<string | null> => {
-    const currentRefreshToken = localStorage.getItem("refresh");
-    if (!currentRefreshToken) {
-      logout();
-      return null;
-    }
-    try {
-      const response = await axiosInstance.post<{ access: string; refresh?: string }>(
-        "/auth/refresh/",
-        { refresh: currentRefreshToken }
-      );
-      const newAccessToken = response.data.access;
-      localStorage.setItem("access", newAccessToken);
-      setAccessToken(newAccessToken);
-
-      if (response.data.refresh) {
-        localStorage.setItem("refresh", response.data.refresh);
-        setRefreshToken(response.data.refresh);
-      }
-      scheduleProactiveRefresh(newAccessToken);
-      return newAccessToken;
-    } catch (error) {
-      console.error("Error refreshing access token:", error);
-      logout();
-      toast.error("Твојата сесија е истечена. Те молам најави се повторно.");
-      return null;
-    }
-  }, []); 
-
-  const logout = () => {
-    if (proactiveRefreshTimeoutId.current) {
-        clearTimeout(proactiveRefreshTimeoutId.current);
-    }
-    localStorage.removeItem("access");
-    localStorage.removeItem("refresh");
-    setAccessToken(null);
-    setRefreshToken(null);
-    setFormData(null);
-    setUser(null);
-  };
-
-  const scheduleProactiveRefresh = (token: string) => {
-    if (proactiveRefreshTimeoutId.current) {
-        clearTimeout(proactiveRefreshTimeoutId.current);
-    }
-
-    try {    
-        const decodedToken = jwtDecode<DecodedToken>(token);
-        const expirationTime = decodedToken.exp * 1000; 
-        const currentTime = Date.now();
-        
-        // Refresh X milliseconds before the token expires
-        const refreshOffset = 30 * 1000; 
-        
-        let timeoutDuration = expirationTime - currentTime - refreshOffset;
-
-        if (timeoutDuration < 0) {
-          // If the token is already about to expire, refresh immediately
-          timeoutDuration = 1000;
-        }
-
-        proactiveRefreshTimeoutId.current = setTimeout(() => {
-            refreshAccessToken();
-        }, timeoutDuration);
-
-    } catch (error) {
-        console.error("Failed to decode token for proactive refresh:", error);
-    }
-  };
-
-  useEffect(() => {
-    const requestIntercept = axiosAuth.interceptors.request.use(
-      (config) => {
-        if (!config.headers["Authorization"]) {
-          config.headers["Authorization"] = `Bearer ${accessToken}`;
-        }
-        return config;
-      },
-      (error) => Promise.reject(error)
-    );
-
-    const responseIntercept = axiosAuth.interceptors.response.use(
-      (response) => response,
-      async (error) => {
-        const prevRequest = error?.config;
-        if (error?.response?.status === 401 && !prevRequest?.sent) {
-          prevRequest.sent = true;
-          const newAccessToken = await refreshAccessToken();
-          if (newAccessToken) {
-            prevRequest.headers["Authorization"] = `Bearer ${newAccessToken}`;
-            return axiosAuth(prevRequest);
-          }
-        }
-        return Promise.reject(error);
-      }
-    );
-
-    return () => {
-      axiosAuth.interceptors.request.eject(requestIntercept);
-      axiosAuth.interceptors.response.eject(responseIntercept);
-    };
-  }, [accessToken, refreshAccessToken, axiosAuth]);
-
-
-  const fetchFormData = useCallback(async (tokenOverride?: string | null) => {
-    // Determine which token to use: the override from login, or the one from state (for refresh)
-    const tokenToUse = tokenOverride || accessToken;
-
-    if (!tokenToUse) {
-      console.log("Fetch aborted, no token available.");
-      return;
-    }
-    
-    try {
-      const response = await axiosAuth.get<StudentData>("/auth/form/", {
-        headers: {
-          Authorization: `Bearer ${tokenToUse}`
-        }
-      });
-      setFormData(response.data);
-    } catch (error) {
-      console.error("Could not fetch user form data", error);
-      toast.error("Не може да се вчитаат податоците.");
-    }
-  }, [axiosAuth, accessToken]); 
-
-  const login = async (newAccessToken: string, newRefreshToken: string, userData: User) => {
-    localStorage.setItem("access", newAccessToken);
-    localStorage.setItem("refresh", newRefreshToken);
-    setUser(userData);
-    setAccessToken(newAccessToken);
-    setRefreshToken(newRefreshToken);
-    scheduleProactiveRefresh(newAccessToken);
-    await fetchFormData(newAccessToken);
-  };
-  
-  
-  useEffect(() => {
-    const token = localStorage.getItem("access");
-    if (token) {
-        scheduleProactiveRefresh(token);
-        fetchFormData(token);
-    }
-    setLoading(false);
-  }, []); 
-
-  useEffect(() => {
-    return () => {
-        if (proactiveRefreshTimeoutId.current) {
-            clearTimeout(proactiveRefreshTimeoutId.current);
-        }
-    }
-  }, []); 
-
-
-  const contextValue: AuthContextType = {
-    accessToken,
-    refreshToken,
-    formData,
-    setFormData,
-    user,
-    login,
-    logout,
-    isAuthenticated: !!accessToken,
-    refreshAccessToken,
-    loading,
-  };
-
-  return (
-    <AuthContext.Provider value={contextValue}>{children}</AuthContext.Provider>
-  );
+	const [user, setUser] = useState<User | null>(null);
+	const [accessToken, setAccessToken] = useState<string | null>(
+		localStorage.getItem("access")
+	);
+	const [refreshToken, setRefreshToken] = useState<string | null>(
+		localStorage.getItem("refresh")
+	);
+	const [formData, setFormData] = useState<StudentData | null>(null);
+	const [loading, setLoading] = useState(true);
+
+	const proactiveRefreshTimeoutId = useRef<number | null>(null);
+	// We cannot use the useAxiosAuth hook here due to the circular dependency.
+	const axiosAuth = axiosInstance;
+
+	const fetchUser = useCallback(
+		async (token: string) => {
+			try {
+				const response = await axiosAuth.get<User>("/auth/user/", {
+					headers: {
+						Authorization: `Bearer ${token}`,
+					},
+				});
+				setUser(response.data);
+			} catch (error) {
+				// If this fails, the token is likely invalid or expired, so log out.
+				console.error("Could not fetch user data on load", error);
+				logout();
+			}
+		},
+		[axiosAuth]
+	);
+
+	// Memoize the refresh function to stabilize dependencies in useEffect
+	const refreshAccessToken = useCallback(async (): Promise<string | null> => {
+		const currentRefreshToken = localStorage.getItem("refresh");
+		if (!currentRefreshToken) {
+			logout();
+			return null;
+		}
+		try {
+			const response = await axiosInstance.post<{
+				access: string;
+				refresh?: string;
+			}>("/auth/refresh/", { refresh: currentRefreshToken });
+			const newAccessToken = response.data.access;
+			localStorage.setItem("access", newAccessToken);
+			setAccessToken(newAccessToken);
+
+			if (response.data.refresh) {
+				localStorage.setItem("refresh", response.data.refresh);
+				setRefreshToken(response.data.refresh);
+			}
+			scheduleProactiveRefresh(newAccessToken);
+			return newAccessToken;
+		} catch (error) {
+			console.error("Error refreshing access token:", error);
+			logout();
+			toast.error("Твојата сесија е истечена. Те молам најави се повторно.");
+			return null;
+		}
+	}, []);
+
+	const logout = () => {
+		if (proactiveRefreshTimeoutId.current) {
+			clearTimeout(proactiveRefreshTimeoutId.current);
+		}
+		localStorage.removeItem("access");
+		localStorage.removeItem("refresh");
+		setAccessToken(null);
+		setRefreshToken(null);
+		setFormData(null);
+		setUser(null);
+	};
+
+	const scheduleProactiveRefresh = (token: string) => {
+		if (proactiveRefreshTimeoutId.current) {
+			clearTimeout(proactiveRefreshTimeoutId.current);
+		}
+
+		try {
+			const decodedToken = jwtDecode<DecodedToken>(token);
+			const expirationTime = decodedToken.exp * 1000;
+			const currentTime = Date.now();
+
+			// Refresh X milliseconds before the token expires
+			const refreshOffset = 30 * 1000;
+
+			let timeoutDuration = expirationTime - currentTime - refreshOffset;
+
+			if (timeoutDuration < 0) {
+				// If the token is already about to expire, refresh immediately
+				timeoutDuration = 1000;
+			}
+
+			proactiveRefreshTimeoutId.current = setTimeout(() => {
+				refreshAccessToken();
+			}, timeoutDuration);
+		} catch (error) {
+			console.error("Failed to decode token for proactive refresh:", error);
+		}
+	};
+
+	useEffect(() => {
+		const requestIntercept = axiosAuth.interceptors.request.use(
+			(config) => {
+				if (!config.headers["Authorization"]) {
+					config.headers["Authorization"] = `Bearer ${accessToken}`;
+				}
+				return config;
+			},
+			(error) => Promise.reject(error)
+		);
+
+		const responseIntercept = axiosAuth.interceptors.response.use(
+			(response) => response,
+			async (error) => {
+				const prevRequest = error?.config;
+				if (error?.response?.status === 401 && !prevRequest?.sent) {
+					prevRequest.sent = true;
+					const newAccessToken = await refreshAccessToken();
+					if (newAccessToken) {
+						prevRequest.headers["Authorization"] = `Bearer ${newAccessToken}`;
+						return axiosAuth(prevRequest);
+					}
+				}
+				return Promise.reject(error);
+			}
+		);
+
+		return () => {
+			axiosAuth.interceptors.request.eject(requestIntercept);
+			axiosAuth.interceptors.response.eject(responseIntercept);
+		};
+	}, [accessToken, refreshAccessToken, axiosAuth]);
+
+	const fetchFormData = useCallback(
+		async (tokenOverride?: string | null) => {
+			// Determine which token to use: the override from login, or the one from state (for refresh)
+			const tokenToUse = tokenOverride || accessToken;
+
+			if (!tokenToUse) {
+				console.log("Fetch aborted, no token available.");
+				return;
+			}
+
+			try {
+				const response = await axiosAuth.get<StudentData>("/auth/form/", {
+					headers: {
+						Authorization: `Bearer ${tokenToUse}`,
+					},
+				});
+				setFormData(response.data);
+			} catch (error) {
+				console.error("Could not fetch user form data", error);
+				toast.error("Не може да се вчитаат податоците.");
+			}
+		},
+		[axiosAuth, accessToken]
+	);
+
+	const login = async (
+		newAccessToken: string,
+		newRefreshToken: string,
+		userData: User
+	) => {
+		localStorage.setItem("access", newAccessToken);
+		localStorage.setItem("refresh", newRefreshToken);
+		setUser(userData);
+		setAccessToken(newAccessToken);
+		setRefreshToken(newRefreshToken);
+		scheduleProactiveRefresh(newAccessToken);
+		await fetchFormData(newAccessToken);
+	};
+
+	useEffect(() => {
+		const initializeAuth = async () => {
+			const token = localStorage.getItem("access");
+			if (token) {
+				scheduleProactiveRefresh(token);
+				// Fetch user data and form data in parallel for speed
+				await Promise.all([fetchUser(token), fetchFormData(token)]);
+			}
+			setLoading(false);
+		};
+
+		initializeAuth();
+	}, [fetchUser, fetchFormData]);
+
+	useEffect(() => {
+		return () => {
+			if (proactiveRefreshTimeoutId.current) {
+				clearTimeout(proactiveRefreshTimeoutId.current);
+			}
+		};
+	}, []);
+
+	const contextValue: AuthContextType = {
+		accessToken,
+		refreshToken,
+		formData,
+		setFormData,
+		user,
+		login,
+		logout,
+		isAuthenticated: !!accessToken,
+		refreshAccessToken,
+		loading,
+	};
+
+	return (
+		<AuthContext.Provider value={contextValue}>{children}</AuthContext.Provider>
+	);
 };
Index: frontend/src/pages/FavoriteSubjects.tsx
===================================================================
--- frontend/src/pages/FavoriteSubjects.tsx	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
+++ frontend/src/pages/FavoriteSubjects.tsx	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -0,0 +1,124 @@
+import { useEffect, useMemo, useState } from "react";
+import { Subject } from "../components/types";
+import SkeletonCard from "../components/SubjectCatalog/SkeletonCard";
+import SubjectList from "../components/SubjectCatalog/SubjectList";
+import SubjectModal from "../components/SubjectCatalog/SubjectModal";
+import { useFavorites } from "../context/FavoritesContext";
+import { useSubjects } from "../context/SubjectsContext";
+import { getSubjectPrerequisites } from "../components/SubjectCatalog/utils";
+
+const FavoriteSubjects = () => {
+	const [subjects] = useSubjects();
+	const { favoriteIds } = useFavorites();
+	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-screen">
+			{favoriteSubjects.length > 0 && (
+				<div className="mb-8 flex justify-center">
+					<div className="px-12 py-8 rounded-2xl shadow-lg border-4 border-blue-500 hover:shadow-xl  hover:scale-105 hover:border-blue-700 transition-all duration-300">
+						<div className="flex items-center justify-center gap-4">
+							<div className="w-12 h-12 bg-green-500 rounded-full flex items-center justify-center">
+								<svg
+									className="w-7 h-7 text-white"
+									fill="none"
+									stroke="currentColor"
+									viewBox="0 0 24 24"
+								>
+									<path
+										strokeLinecap="round"
+										strokeLinejoin="round"
+										strokeWidth={3}
+										d="M5 13l4 4L19 7"
+									/>
+								</svg>
+							</div>
+							<p className="text-gray-800 font-bold text-2xl">
+								{favoriteSubjects.length === 1
+									? "Имаш 1 омилен предмет!"
+									: `Имаш ${favoriteSubjects.length} омилени предмети!`}
+							</p>
+						</div>
+					</div>
+				</div>
+			)}
+
+			<div className="flex flex-col md:flex-row gap-6">
+				<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}
+						/>
+					)}
+
+					{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/Recommendations.tsx
===================================================================
--- frontend/src/pages/Recommendations.tsx	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ frontend/src/pages/Recommendations.tsx	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -74,7 +74,5 @@
 
 	const openSubjectView = (subject: Subject) => {
-		navigate(`/subjects/${subject.code}`, {
-			state: { from: "/recommendations" },
-		});
+		navigate(`/subjects/${subject.code}`);
 	};
 
@@ -209,18 +207,25 @@
 
 												<div className="flex justify-between mt-auto gap-3">
-													<button onClick={() => openSubjectDetails(subject)}>
-														<img src="src/assets/eye.svg" className="w-5 h-5" />
-													</button>
-													<FavoriteButton subjectId={subject.id} />
-													<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 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>
Index: frontend/src/pages/SubjectView.tsx
===================================================================
--- frontend/src/pages/SubjectView.tsx	(revision 79202a96c87ad560ffa6e5bfdc602b17f3b1eab6)
+++ frontend/src/pages/SubjectView.tsx	(revision 3152c66b24fdb12ec187239a8a0b8a6c1a51e882)
@@ -44,8 +44,4 @@
 		selectedSubject &&
 		selectedSubject.abstract.split(/\s+/).length > WORD_LIMIT;
-
-	const handleGoBack = () => {
-		navigate(from);
-	};
 
 	useEffect(() => {
@@ -93,14 +89,9 @@
 				<div className="max-w-6xl mx-auto px-4 py-4">
 					<button
-						onClick={handleGoBack}
+						onClick={() => navigate(-1)}
 						className="flex items-center text-gray-600 hover:text-gray-900 mb-4"
 					>
 						<ArrowLeft className="w-5 h-5 mr-2" />
-						Назад кон
-						{from == "/subjects"
-							? " сите предмети"
-							: from == "/recommendations"
-							? " препораките"
-							: " домашната страна"}
+						Назад
 					</button>
 
