Index: frontend/src/api/subjects.ts
===================================================================
--- frontend/src/api/subjects.ts	(revision 8ba18400835e3bf5d7e72a00230cdbcb5606d5f5)
+++ frontend/src/api/subjects.ts	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -2,9 +2,7 @@
 import { Subject } from "../components/types";
 
-interface fetchSubjectsProps {
-	setSubjects: Dispatch<SetStateAction<Subject[]>>;
-}
-
-export const fetchSubjects = async ({ setSubjects }: fetchSubjectsProps) => {
+export const fetchSubjects = async (
+	setSubjects: Dispatch<SetStateAction<Subject[]>>
+) => {
 	try {
 		const resSubjects = await fetch("http://localhost:8000/subjects/all/");
Index: frontend/src/components/Reviews/EvaluationReviews.tsx
===================================================================
--- frontend/src/components/Reviews/EvaluationReviews.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
+++ frontend/src/components/Reviews/EvaluationReviews.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -0,0 +1,110 @@
+import { EVALUATION_MAP_TO_MK } from "../../constants/subjects";
+import { Reviews } from "../types";
+import Votes from "./Votes";
+
+interface EvaluationReviewsProps {
+	reviews: Reviews;
+}
+
+const EvaluationReviews = ({ reviews }: EvaluationReviewsProps) => {
+	return (
+		<>
+			{reviews.evaluation?.methods?.length > 0 && (
+				<div className="mb-8">
+					<h3 className="text-lg font-medium mb-4 text-gray-900">
+						Информации за полагање
+					</h3>
+					<div className="space-y-4">
+						{reviews &&
+							reviews.evaluation &&
+							(reviews.evaluation?.methods?.length > 0 ? (
+								<div className="border border-gray-200 rounded-lg p-4">
+									<div className="flex items-start justify-between mb-3">
+										<div className="flex items-center space-x-2">
+											<span className="text-sm text-gray-600">
+												Индекс: {reviews.evaluation?.review.student}
+											</span>
+											{reviews.evaluation?.review.is_confirmed ? (
+												<div className="flex items-center text-green-600">
+													{/* <CheckCircle className="w-4 h-4 mr-1" /> */}
+													<span className="text-sm">Потврдено</span>
+												</div>
+											) : (
+												<div className="flex items-center text-red-600 group relative cursor-help">
+													<span className="text-sm border-red-600 border-b border-dotted">
+														Непотврдено
+													</span>
+													<div className="absolute left-1/2 -translate-x-1/2 top-full mt-2 z-10 hidden group-hover:block bg-white text-gray-800 text-xs rounded shadow-lg px-3 py-2 w-48 border border-gray-200">
+														Администратор сè уште не ја потврдил точноста на
+														оваа информација.
+													</div>
+												</div>
+											)}
+										</div>
+										<Votes reviews={reviews} />
+									</div>
+									{reviews.evaluation?.methods?.map((method, index) => (
+										<div key={index}>
+											<div className="space-y-4 mb-3">
+												<div>
+													<p className="text-sm text-gray-600 mb-2 font-semibold">
+														Начин на оценување {index + 1}:
+													</p>
+													<div className="overflow-x-auto">
+														<table className="min-w-full border border-gray-300">
+															<thead className="bg-gray-50">
+																<tr>
+																	<th className="px-4 py-2 text-left text-sm font-medium text-gray-700 border-b">
+																		Активност
+																	</th>
+																	<th className="px-4 py-2 text-left text-sm font-medium text-gray-700 border-b">
+																		Процент од оценка
+																	</th>
+																</tr>
+															</thead>
+															<tbody>
+																{method.components.map((component, index) => (
+																	<tr key={index}>
+																		<td className="px-4 py-2 text-sm text-gray-900 border-b">
+																			{
+																				EVALUATION_MAP_TO_MK[
+																					(component.category
+																						.charAt(0)
+																						.toUpperCase() +
+																						component.category.slice(
+																							1
+																						)) as keyof typeof EVALUATION_MAP_TO_MK
+																				]
+																			}
+																		</td>
+																		<td className="px-4 py-2 text-sm text-gray-900 border-b">
+																			{component.percentage}%
+																		</td>
+																	</tr>
+																))}
+															</tbody>
+														</table>
+													</div>
+												</div>
+											</div>
+										</div>
+									))}
+									<p className="text-gray-800 font-semibold">
+										Услов за потпис:{" "}
+										<span>
+											{reviews.evaluation.signature_condition &&
+											reviews.evaluation.signature_condition != "None"
+												? reviews.evaluation.signature_condition
+												: "Нема"}
+										</span>
+									</p>
+								</div>
+							) : null)}
+					</div>
+				</div>
+			)}
+		</>
+	);
+};
+
+export default EvaluationReviews;
Index: frontend/src/components/Reviews/OtherReviews.tsx
===================================================================
--- frontend/src/components/Reviews/OtherReviews.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
+++ frontend/src/components/Reviews/OtherReviews.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -0,0 +1,54 @@
+import { MAP_REVIEW_CATEGORY_TO_MK } from "../SubjectCatalog/utils";
+import { Reviews } from "../types";
+import Votes from "./Votes";
+
+interface OtherReviewsProps {
+	reviews: Reviews;
+}
+
+const OtherReviews = ({ reviews }: OtherReviewsProps) => {
+	return (
+		<div>
+			<h3 className="text-lg font-medium mb-4 text-gray-900">
+				Останати информации
+			</h3>
+
+			<div className="space-y-4">
+				{reviews.other.map((review) => (
+					<div className="border border-gray-200 rounded-lg p-4">
+						<div className="flex items-start justify-between mb-3">
+							<div className="flex items-center space-x-2">
+								<span className="text-sm text-gray-600">
+									Индекс: {review.review.student}
+								</span>
+								<span className="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">
+									{MAP_REVIEW_CATEGORY_TO_MK[review.category]}
+								</span>
+								{reviews.evaluation?.review.is_confirmed ? (
+									<div className="flex items-center text-green-600">
+										{/* <CheckCircle className="w-4 h-4 mr-1" /> */}
+										<span className="text-sm">Потврдено</span>
+									</div>
+								) : (
+									<div className="flex items-center text-red-600 group relative cursor-help">
+										<span className="text-sm border-red-600 border-b border-dotted">
+											Непотврдено
+										</span>
+										<div className="absolute left-1/2 -translate-x-1/2 top-full mt-2 z-10 hidden group-hover:block bg-white text-gray-800 text-xs rounded shadow-lg px-3 py-2 w-48 border border-gray-200">
+											Администратор сè уште не ја потврдил точноста на оваа
+											информација.
+										</div>
+									</div>
+								)}
+							</div>
+							<Votes reviews={reviews} />
+						</div>
+						<p className="text-gray-700 text-sm">{review.content}</p>
+					</div>
+				))}
+			</div>
+		</div>
+	);
+};
+
+export default OtherReviews;
Index: frontend/src/components/Reviews/Votes.tsx
===================================================================
--- frontend/src/components/Reviews/Votes.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
+++ frontend/src/components/Reviews/Votes.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -0,0 +1,46 @@
+import { ArrowDown, ArrowUp } from "lucide-react";
+import { useAuth } from "../../hooks/useAuth";
+import { Reviews } from "../types";
+
+interface VotesProps {
+	reviews: Reviews;
+	review_id?: number;
+}
+
+const Votes = ({ reviews }: VotesProps) => {
+	const { isAuthenticated } = useAuth();
+	const handleClick = (action: "up" | "down") => {
+		console.log(action);
+	};
+
+	return (
+		<div className="flex items-center space-x-1">
+			<button
+				className={`flex items-center justify-center w-6 h-6 text-gray-400 rounded transition-colors ${
+					!isAuthenticated
+						? "cursor-not-allowed"
+						: "cursor-pointer hover:text-green-600 hover:bg-green-50 "
+				}`}
+				onClick={() => handleClick("up")}
+				disabled={!isAuthenticated}
+			>
+				<ArrowUp className="w-4 h-4" />
+			</button>
+			<span className="text-sm font-medium text-gray-700 min-w-[20px] text-center">
+				{reviews.evaluation?.review.votes_count}
+			</span>
+			<button
+				className={`flex items-center justify-center w-6 h-6 text-gray-400 rounded transition-color ${
+					!isAuthenticated
+						? "cursor-not-allowed"
+						: "cursor-pointer hover:text-red-600 hover:bg-red-50"
+				}`}
+				disabled={!isAuthenticated}
+			>
+				<ArrowDown className="w-4 h-4" />
+			</button>
+		</div>
+	);
+};
+
+export default Votes;
Index: frontend/src/components/StudentForm/StudentForm.tsx
===================================================================
--- frontend/src/components/StudentForm/StudentForm.tsx	(revision 8ba18400835e3bf5d7e72a00230cdbcb5606d5f5)
+++ frontend/src/components/StudentForm/StudentForm.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -138,5 +138,5 @@
 	useEffect(() => {
 		if (!subjects || subjects.length === 0) {
-			fetchSubjects({ setSubjects });
+			fetchSubjects(setSubjects);
 		}
 		const token = localStorage.getItem("access");
Index: frontend/src/components/SubjectCatalog/SubjectCatalog.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SubjectCatalog.tsx	(revision 8ba18400835e3bf5d7e72a00230cdbcb5606d5f5)
+++ frontend/src/components/SubjectCatalog/SubjectCatalog.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -94,5 +94,5 @@
 	useEffect(() => {
 		if (!subjects || subjects.length === 0) {
-			fetchSubjects({ setSubjects });
+			fetchSubjects(setSubjects);
 		}
 	}, []);
Index: frontend/src/components/SubjectCatalog/utils.ts
===================================================================
--- frontend/src/components/SubjectCatalog/utils.ts	(revision 8ba18400835e3bf5d7e72a00230cdbcb5606d5f5)
+++ frontend/src/components/SubjectCatalog/utils.ts	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -1,5 +1,5 @@
 import { EVALUATION_MAP_TO_MK } from "../../constants/subjects";
 import { LatinToCyrillic } from "../StudentForm/utils";
-import { Filters, StudyTrack, Subject } from "../types";
+import { Filters, OtherReview, StudyTrack, Subject } from "../types";
 
 interface filteredSubjectsParams {
@@ -195,2 +195,11 @@
 	return "Нема предуслов";
 };
+
+export const MAP_REVIEW_CATEGORY_TO_MK: Record<
+	OtherReview["category"],
+	string
+> = {
+	material: "Материјал",
+	staff: "Кадар",
+	other: "Друго",
+};
Index: frontend/src/components/types.ts
===================================================================
--- frontend/src/components/types.ts	(revision 8ba18400835e3bf5d7e72a00230cdbcb5606d5f5)
+++ frontend/src/components/types.ts	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -67,2 +67,42 @@
 
 export type StudyTrack = (typeof STUDY_TRACKS)[number];
+
+export interface EvaluationComponent {
+	category:
+		| "project"
+		| "theory"
+		| "practical"
+		| "homework"
+		| "attendance"
+		| "presentation";
+	percentage: number;
+}
+
+export interface EvaluationMethod {
+	note?: string;
+	components: EvaluationComponent[];
+}
+
+export interface EvaluationReview {
+	review: Review;
+	methods: EvaluationMethod[];
+	signature_condition: string;
+}
+
+export interface OtherReview {
+	review: Review;
+	category: "material" | "staff" | "other";
+	content: string;
+}
+
+export interface Review {
+	id?: number;
+	student?: string;
+	is_confirmed?: boolean;
+	votes_count?: number;
+}
+
+export interface Reviews {
+	evaluation: EvaluationReview; // only one evaluation review per subject
+	other: OtherReview[];
+}
Index: frontend/src/pages/Recommendations.tsx
===================================================================
--- frontend/src/pages/Recommendations.tsx	(revision 8ba18400835e3bf5d7e72a00230cdbcb5606d5f5)
+++ frontend/src/pages/Recommendations.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -35,5 +35,5 @@
 	useEffect(() => {
 		if (!subjects || subjects.length === 0) {
-			fetchSubjects({ setSubjects });
+			fetchSubjects(setSubjects);
 		}
 	}, [subjects, setSubjects]);
Index: frontend/src/pages/SubjectPreferences.tsx
===================================================================
--- frontend/src/pages/SubjectPreferences.tsx	(revision 8ba18400835e3bf5d7e72a00230cdbcb5606d5f5)
+++ frontend/src/pages/SubjectPreferences.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -34,5 +34,5 @@
 	useEffect(() => {
 		if (!subjects || subjects.length === 0) {
-			fetchSubjects({ setSubjects });
+			fetchSubjects(setSubjects);
 		}
 	}, []);
Index: frontend/src/pages/SubjectView.tsx
===================================================================
--- frontend/src/pages/SubjectView.tsx	(revision 8ba18400835e3bf5d7e72a00230cdbcb5606d5f5)
+++ frontend/src/pages/SubjectView.tsx	(revision 22463abb0ce76a33d80a0bf318fecd95935af16e)
@@ -1,6 +1,4 @@
 import {
-	ArrowDown,
 	ArrowLeft,
-	ArrowUp,
 	Tag,
 	// ThumbsDown,
@@ -11,46 +9,12 @@
 import { Link, useLocation, useNavigate, useParams } from "react-router-dom";
 import axiosInstance from "../api/axiosInstance";
+import { fetchSubjects } from "../api/subjects";
+import EvaluationReviews from "../components/Reviews/EvaluationReviews";
+import OtherReviews from "../components/Reviews/OtherReviews";
 import { getSubjectPrerequisites } from "../components/SubjectCatalog/utils";
 import SkeletonSubjectView from "../components/SubjectView/SkeletonSubjectView";
+import { Reviews } from "../components/types";
 import { EVALUATION_MAP_TO_MK } from "../constants/subjects";
 import { useSubjects } from "../context/SubjectsContext";
-
-interface EvaluationComponent {
-	category:
-		| "project"
-		| "theory"
-		| "practical"
-		| "homework"
-		| "attendance"
-		| "presentation";
-	percentage: number;
-}
-
-interface EvaluationMethod {
-	note?: string;
-	components: EvaluationComponent[];
-}
-
-interface EvaluationReview {
-	review: Review;
-	methods: EvaluationMethod[];
-}
-
-interface OtherReview {
-	review: Review;
-	category: "material" | "staff" | "other";
-	content: string;
-}
-
-interface Review {
-	student?: string;
-	is_confirmed?: boolean;
-	votes_count?: number;
-}
-
-interface Reviews {
-	evaluation: EvaluationReview; // only one evaluation review per subject
-	other: OtherReview[];
-}
 
 function SubjectView() {
@@ -67,5 +31,5 @@
 	const location = useLocation();
 
-	const [subjects] = useSubjects();
+	const [subjects, setSubjects] = useSubjects();
 
 	// useMemo makes this efficient, so it only re-calculates when subjects or code changes.
@@ -87,4 +51,8 @@
 		})();
 	}, [selectedSubject]);
+
+	useEffect(() => {
+		fetchSubjects(setSubjects);
+	}, []);
 
 	const WORD_LIMIT = 40;
@@ -317,157 +285,8 @@
 									</h2>
 									{reviews.evaluation.methods.length > 0 && (
-										<>
-											{reviews.evaluation?.methods?.length > 0 && (
-												<div className="mb-8">
-													<h3 className="text-lg font-medium mb-4 text-gray-900">
-														Информации за полагање
-													</h3>
-													<div className="space-y-4">
-														{reviews &&
-															reviews.evaluation &&
-															(reviews.evaluation?.methods?.length > 0 ? (
-																<div className="border border-gray-200 rounded-lg p-4">
-																	<div className="flex items-start justify-between mb-3">
-																		<div className="flex items-center space-x-2">
-																			<span className="text-sm text-gray-600">
-																				Индекс:{" "}
-																				{reviews.evaluation?.review.student}
-																			</span>
-																			{reviews.evaluation?.review
-																				.is_confirmed ? (
-																				<div className="flex items-center text-green-600">
-																					{/* <CheckCircle className="w-4 h-4 mr-1" /> */}
-																					<span className="text-sm">
-																						Потврдено
-																					</span>
-																				</div>
-																			) : (
-																				<div className="flex items-center text-red-600">
-																					<span className="text-sm">
-																						Непотврдено
-																					</span>
-																				</div>
-																			)}
-																		</div>
-																		<div className="flex items-center space-x-1">
-																			<button className="flex items-center justify-center w-6 h-6 text-gray-400 hover:text-green-600 hover:bg-green-50 rounded">
-																				<ArrowUp className="w-4 h-4" />
-																			</button>
-																			<span className="text-sm font-medium text-gray-700 min-w-[20px] text-center">
-																				{reviews.evaluation?.review.votes_count}
-																			</span>
-																			<button className="flex items-center justify-center w-6 h-6 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded">
-																				<ArrowDown className="w-4 h-4" />
-																			</button>
-																		</div>
-																	</div>
-																	{reviews.evaluation?.methods?.map(
-																		(method, index) => (
-																			<div key={index}>
-																				<div className="space-y-4 mb-3">
-																					<div>
-																						<p className="text-sm text-gray-600 mb-2">
-																							Начин на положување {index + 1}:
-																						</p>
-																						<div className="overflow-x-auto">
-																							<table className="min-w-full border border-gray-300">
-																								<thead className="bg-gray-50">
-																									<tr>
-																										<th className="px-4 py-2 text-left text-sm font-medium text-gray-700 border-b">
-																											Активност
-																										</th>
-																										<th className="px-4 py-2 text-left text-sm font-medium text-gray-700 border-b">
-																											Процент од оценка
-																										</th>
-																									</tr>
-																								</thead>
-																								<tbody>
-																									{method.components.map(
-																										(component, cidx) => (
-																											<tr key={cidx}>
-																												<td className="px-4 py-2 text-sm text-gray-900 border-b">
-																													{
-																														EVALUATION_MAP_TO_MK[
-																															(component.category
-																																.charAt(0)
-																																.toUpperCase() +
-																																component.category.slice(
-																																	1
-																																)) as keyof typeof EVALUATION_MAP_TO_MK
-																														]
-																													}
-																												</td>
-																												<td className="px-4 py-2 text-sm text-gray-900 border-b">
-																													{component.percentage}
-																													%
-																												</td>
-																											</tr>
-																										)
-																									)}
-																								</tbody>
-																							</table>
-																						</div>
-																					</div>
-																				</div>
-																			</div>
-																		)
-																	)}
-																	<p className="text-gray-800">
-																		Услов за потпис: <span>TODO</span>
-																	</p>
-																</div>
-															) : null)}
-													</div>
-												</div>
-											)}
-										</>
+										<EvaluationReviews reviews={reviews} />
 									)}
 									{reviews.other.length > 0 && (
-										<div>
-											<h3 className="text-lg font-medium mb-4 text-gray-900">
-												Останати информации
-											</h3>
-
-											<div className="space-y-4">
-												{reviews.other.map((review) => (
-													<div className="border border-gray-200 rounded-lg p-4">
-														<div className="flex items-start justify-between mb-3">
-															<div className="flex items-center space-x-2">
-																<span className="text-sm text-gray-600">
-																	Индекс: {review.review.student}
-																</span>
-																<span className="bg-blue-100 text-blue-800 px-2 py-1 rounded text-xs">
-																	{review.category}
-																</span>
-																{reviews.evaluation?.review.is_confirmed ? (
-																	<div className="flex items-center text-green-600">
-																		{/* <CheckCircle className="w-4 h-4 mr-1" /> */}
-																		<span className="text-sm">Потврдено</span>
-																	</div>
-																) : (
-																	<div className="flex items-center text-red-600">
-																		<span className="text-sm">Непотврдено</span>
-																	</div>
-																)}
-															</div>
-															<div className="flex items-center space-x-1">
-																<button className="flex items-center justify-center w-6 h-6 text-gray-400 hover:text-green-600 hover:bg-green-50 rounded">
-																	<ArrowUp className="w-4 h-4" />
-																</button>
-																<span className="text-sm font-medium text-gray-700 min-w-[20px] text-center">
-																	{review.review.votes_count}
-																</span>
-																<button className="flex items-center justify-center w-6 h-6 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded">
-																	<ArrowDown className="w-4 h-4" />
-																</button>
-															</div>
-														</div>
-														<p className="text-gray-700 text-sm">
-															{review.content}
-														</p>
-													</div>
-												))}
-											</div>
-										</div>
+										<OtherReviews reviews={reviews} />
 									)}
 								</>
