Index: backend/subjects/management/data/additional_info.json
===================================================================
--- backend/subjects/management/data/additional_info.json	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ backend/subjects/management/data/additional_info.json	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -51,5 +51,6 @@
 		"name": "Е-учење",
 		"tags": ["Education", "Societal Skills"],
-		"isEasy": "yes"
+		"isEasy": "yes",
+		"evaluation": ["Theory", "Project"]
 	},
 	{
@@ -189,5 +190,6 @@
 		"name": "Вовед во екоинформатиката",
 		"tags": ["Data Science", "Computer Science", "Societal Skills"],
-		"isEasy": "yes"
+		"isEasy": "yes",
+		"evaluation": ["Theory", "Project"]
 	},
 	{
@@ -231,5 +233,6 @@
 	{
 		"name": "Електрични кола",
-		"tags": ["Computer Architecture", "Physics"]
+		"tags": ["Computer Architecture", "Physics"],
+		"evaluation": ["Practical"]
 	},
 	{
@@ -379,5 +382,6 @@
 			"Computer Architecture",
 			"Software Engineering"
-		]
+		],
+		"evaluation": ["Theory + Practical", "Project"]
 	},
 	{
@@ -394,5 +398,6 @@
 	{
 		"name": "Виртуелизација",
-		"tags": ["Cloud Engineering & DevOps", "Systems Infrastructure"]
+		"tags": ["Cloud Engineering & DevOps", "Systems Infrastructure"],
+		"evaluation": ["Theory + Practical", "Project"]
 	},
 	{
@@ -503,5 +508,7 @@
 	{
 		"name": "Компјутерска етика",
-		"tags": ["Societal Skills", "Computer Science"],
+		"tags": ["Societal Skills", "Education"],
+		"technologies": [],
+		"evaluation": ["Theory", "Project"],
 		"isEasy": "yes"
 	},
Index: backend/subjects/management/data/subject_details.json
===================================================================
--- backend/subjects/management/data/subject_details.json	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ backend/subjects/management/data/subject_details.json	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -227,5 +227,5 @@
 		"tags": ["Education", "Societal Skills"],
 		"technologies": [],
-		"evaluation": [],
+		"evaluation": ["Theory", "Project"],
 		"isEasy": true
 	},
@@ -799,5 +799,5 @@
 		"tags": ["Data Science", "Computer Science", "Societal Skills"],
 		"technologies": [],
-		"evaluation": [],
+		"evaluation": ["Theory", "Project"],
 		"isEasy": true
 	},
@@ -970,5 +970,5 @@
 		"tags": ["Computer Architecture", "Physics"],
 		"technologies": [],
-		"evaluation": [],
+		"evaluation": ["Practical"],
 		"isEasy": false
 	},
@@ -1619,5 +1619,5 @@
 		],
 		"technologies": [],
-		"evaluation": [],
+		"evaluation": ["Theory + Practical", "Project"],
 		"isEasy": false
 	},
@@ -1704,5 +1704,5 @@
 		"tags": ["Cloud Engineering & DevOps", "Systems Infrastructure"],
 		"technologies": [],
-		"evaluation": [],
+		"evaluation": ["Theory + Practical", "Project"],
 		"isEasy": false
 	},
@@ -2090,7 +2090,7 @@
 		"professors": ["Бојан Илијоски", "Катерина Здравкова"],
 		"assistants": [],
-		"tags": ["Societal Skills", "Computer Science"],
-		"technologies": [],
-		"evaluation": [],
+		"tags": ["Societal Skills", "Education"],
+		"technologies": [],
+		"evaluation": ["Theory", "Project"],
 		"isEasy": true
 	},
Index: backend/subjects/serializers.py
===================================================================
--- backend/subjects/serializers.py	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ backend/subjects/serializers.py	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -17,5 +17,9 @@
             'elective_for',
             'professors',
-            'assistants'
+            'assistants',
+            'tags',
+            'technologies',
+            'evaluation',
+            'is_easy'
         ]
 class SubjectSerializer(serializers.ModelSerializer):
Index: backend/subjects/views.py
===================================================================
--- backend/subjects/views.py	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ backend/subjects/views.py	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -8,5 +8,4 @@
 from .models import Subject_Info, Subject
 
-# Create your views here.
 def index(request):
     return HttpResponse("ok")
Index: frontend/package-lock.json
===================================================================
--- frontend/package-lock.json	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/package-lock.json	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -13,5 +13,5 @@
 				"react": "^19.0.0",
 				"react-dom": "^19.0.0",
-				"react-router-dom": "^7.5.0"
+				"react-router-dom": "^7.6.0"
 			},
 			"devDependencies": {
@@ -29,5 +29,5 @@
 				"typescript": "~5.7.2",
 				"typescript-eslint": "^8.26.1",
-				"vite": "^6.3.0"
+				"vite": "^6.3.5"
 			}
 		},
@@ -1440,10 +1440,4 @@
 				"@babel/types": "^7.20.7"
 			}
-		},
-		"node_modules/@types/cookie": {
-			"version": "0.6.0",
-			"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
-			"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
-			"license": "MIT"
 		},
 		"node_modules/@types/estree": {
@@ -3792,13 +3786,11 @@
 		},
 		"node_modules/react-router": {
-			"version": "7.5.0",
-			"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.5.0.tgz",
-			"integrity": "sha512-estOHrRlDMKdlQa6Mj32gIks4J+AxNsYoE0DbTTxiMy2mPzZuWSDU+N85/r1IlNR7kGfznF3VCUlvc5IUO+B9g==",
-			"license": "MIT",
-			"dependencies": {
-				"@types/cookie": "^0.6.0",
+			"version": "7.6.0",
+			"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.0.tgz",
+			"integrity": "sha512-GGufuHIVCJDbnIAXP3P9Sxzq3UUsddG3rrI3ut1q6m0FI6vxVBF3JoPQ38+W/blslLH4a5Yutp8drkEpXoddGQ==",
+			"license": "MIT",
+			"dependencies": {
 				"cookie": "^1.0.1",
-				"set-cookie-parser": "^2.6.0",
-				"turbo-stream": "2.4.0"
+				"set-cookie-parser": "^2.6.0"
 			},
 			"engines": {
@@ -3816,10 +3808,10 @@
 		},
 		"node_modules/react-router-dom": {
-			"version": "7.5.0",
-			"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.5.0.tgz",
-			"integrity": "sha512-fFhGFCULy4vIseTtH5PNcY/VvDJK5gvOWcwJVHQp8JQcWVr85ENhJ3UpuF/zP1tQOIFYNRJHzXtyhU1Bdgw0RA==",
-			"license": "MIT",
-			"dependencies": {
-				"react-router": "7.5.0"
+			"version": "7.6.0",
+			"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.0.tgz",
+			"integrity": "sha512-DYgm6RDEuKdopSyGOWZGtDfSm7Aofb8CCzgkliTjtu/eDuB0gcsv6qdFhhi8HdtmA+KHkt5MfZ5K2PdzjugYsA==",
+			"license": "MIT",
+			"dependencies": {
+				"react-router": "7.6.0"
 			},
 			"engines": {
@@ -4256,11 +4248,11 @@
 		},
 		"node_modules/tinyglobby": {
-			"version": "0.2.12",
-			"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
-			"integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"fdir": "^6.4.3",
+			"version": "0.2.13",
+			"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
+			"integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
+			"dev": true,
+			"license": "MIT",
+			"dependencies": {
+				"fdir": "^6.4.4",
 				"picomatch": "^4.0.2"
 			},
@@ -4273,7 +4265,7 @@
 		},
 		"node_modules/tinyglobby/node_modules/fdir": {
-			"version": "6.4.3",
-			"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
-			"integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
+			"version": "6.4.4",
+			"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+			"integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
 			"dev": true,
 			"license": "MIT",
@@ -4332,10 +4324,4 @@
 			"dev": true,
 			"license": "Apache-2.0"
-		},
-		"node_modules/turbo-stream": {
-			"version": "2.4.0",
-			"resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz",
-			"integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==",
-			"license": "ISC"
 		},
 		"node_modules/type-check": {
@@ -4438,16 +4424,16 @@
 		},
 		"node_modules/vite": {
-			"version": "6.3.0",
-			"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.0.tgz",
-			"integrity": "sha512-9aC0n4pr6hIbvi1YOpFjwQ+QOTGssvbJKoeYkuHHGWwlXfdxQlI8L2qNMo9awEEcCPSiS+5mJZk5jH1PAqoDeQ==",
+			"version": "6.3.5",
+			"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
+			"integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
 				"esbuild": "^0.25.0",
-				"fdir": "^6.4.3",
+				"fdir": "^6.4.4",
 				"picomatch": "^4.0.2",
 				"postcss": "^8.5.3",
 				"rollup": "^4.34.9",
-				"tinyglobby": "^0.2.12"
+				"tinyglobby": "^0.2.13"
 			},
 			"bin": {
@@ -4513,7 +4499,7 @@
 		},
 		"node_modules/vite/node_modules/fdir": {
-			"version": "6.4.3",
-			"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
-			"integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
+			"version": "6.4.4",
+			"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+			"integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
 			"dev": true,
 			"license": "MIT",
Index: frontend/package.json
===================================================================
--- frontend/package.json	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/package.json	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -18,5 +18,5 @@
 		"react": "^19.0.0",
 		"react-dom": "^19.0.0",
-		"react-router-dom": "^7.5.0"
+		"react-router-dom": "^7.6.0"
 	},
 	"devDependencies": {
@@ -34,5 +34,5 @@
 		"typescript": "~5.7.2",
 		"typescript-eslint": "^8.26.1",
-		"vite": "^6.3.0"
+		"vite": "^6.3.5"
 	}
 }
Index: frontend/src/components/Navbar.tsx
===================================================================
--- frontend/src/components/Navbar.tsx	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/components/Navbar.tsx	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -1,104 +1,140 @@
-import { useState } from 'react';
+import axios from "axios";
+import { useState } from "react";
 import { Link, useNavigate } from "react-router-dom";
+import IOimage from "../assets/IOLogo.png";
 import { useAuth } from "../hooks/useAuth";
-import IOimage from "../assets/IOLogo.png";
 
 const Navbar: React.FC = () => {
-  const [menuOpen, setMenuOpen] = useState(false);
-  const { isAuthenticated, logout } = useAuth();
-  const navigate = useNavigate();
+	const [menuOpen, setMenuOpen] = useState(false);
+	const { isAuthenticated, logout } = useAuth();
+	const navigate = useNavigate();
+	const { login } = useAuth();
 
-  const handleLogout = () => {
-    logout();
-    navigate("/");
-  };
+	const handleLogout = () => {
+		logout();
+		navigate("/");
+	};
 
-  return (
-    <nav className="bg-gray-800 text-white p-4">
-      <div className="flex justify-between items-center">
-        <div className="flex items-center space-x-4">
-          <Link to="/">
-            <img
-              src={IOimage}
-              alt="Дома"
-              className="w-10 h-10 object-cover rounded-lg shadow-md hover:scale-110 transition duration-300"
-            />
-          </Link>
-        </div>
+	const testAccountLogin = async () => {
+		if (isAuthenticated) return;
+		try {
+			const response = await axios.post("http://localhost:8000/auth/login/", {
+				email: "fffff@finki.ukim.mk",
+				password: "testTestTEST123",
+			});
+			const { access, refresh } = response.data;
+			login(access, refresh);
+			navigate("/");
+		} catch (err: unknown) {
+			console.log(err);
+		}
+	};
 
-        
-        <button
-          onClick={() => setMenuOpen(!menuOpen)}
-          className="sm:hidden focus:outline-none"
-        >
-          <svg
-            className="w-6 h-6"
-            fill="none"
-            stroke="currentColor"
-            viewBox="0 0 24 24"
-          >
-            {menuOpen ? (
-              <path
-                strokeLinecap="round"
-                strokeLinejoin="round"
-                strokeWidth="2"
-                d="M6 18L18 6M6 6l12 12"
-              />
-            ) : (
-              <path
-                strokeLinecap="round"
-                strokeLinejoin="round"
-                strokeWidth="2"
-                d="M4 6h16M4 12h16M4 18h16"
-              />
-            )}
-          </svg>
-        </button>
+	return (
+		<nav className="bg-gray-800 text-white p-4">
+			<div className="flex justify-between items-center">
+				<div className="flex items-center space-x-4">
+					<Link to="/">
+						<img
+							src={IOimage}
+							alt="Дома"
+							className="w-10 h-10 object-cover rounded-lg shadow-md hover:scale-110 transition duration-300"
+						/>
+					</Link>
+				</div>
 
-        <div className="hidden sm:flex space-x-4 items-center text-sm sm:text-base">
-          <Link to="/subjects" className="hover:underline">Предмети</Link>
-          {isAuthenticated && <Link to="/account" className="hover:underline">Профил</Link>}
-          {isAuthenticated ? (
-            <button
-              onClick={handleLogout}
-              className="bg-red-500 hover:bg-red-600 px-3 py-1 rounded"
-            >
-              Одјави се
-            </button>
-          ) : (
-            <>
-              <Link to="/login" className="hover:underline">Најави се</Link>
-              <Link to="/register" className="hover:underline">Регистрирај се</Link>
-            </>
-          )}
-        </div>
-      </div>
+				<button
+					onClick={() => setMenuOpen(!menuOpen)}
+					className="sm:hidden focus:outline-none"
+				>
+					<svg
+						className="w-6 h-6"
+						fill="none"
+						stroke="currentColor"
+						viewBox="0 0 24 24"
+					>
+						{menuOpen ? (
+							<path
+								strokeLinecap="round"
+								strokeLinejoin="round"
+								strokeWidth="2"
+								d="M6 18L18 6M6 6l12 12"
+							/>
+						) : (
+							<path
+								strokeLinecap="round"
+								strokeLinejoin="round"
+								strokeWidth="2"
+								d="M4 6h16M4 12h16M4 18h16"
+							/>
+						)}
+					</svg>
+				</button>
 
-      {menuOpen && (
-        <div className="sm:hidden mt-3 flex flex-col space-y-2 text-sm">
-          <Link to="/subjects" className="hover:underline">Предмети</Link>
-          {isAuthenticated && <Link to="/account" className="hover:underline">Профил</Link>}
-          {isAuthenticated ? (
-            <button
-              onClick={() => {
-                handleLogout();
-                setMenuOpen(false);
-              }}
-              className="bg-red-500 hover:bg-red-600 px-3 py-1 rounded"
-            >
-              Одјави се
-            </button>
-          ) : (
-            <>
-              <Link to="/login" onClick={() => setMenuOpen(false)}>Најави се</Link>
-              <Link to="/register" onClick={() => setMenuOpen(false)}>Регистрирај се</Link>
-            </>
-          )}
-        </div>
-      )}
-    </nav>
-  );
+				<div className="hidden sm:flex space-x-4 items-center text-sm sm:text-base">
+					<button onClick={testAccountLogin}>quick login</button>
+					<Link to="/subjects" className="hover:underline">
+						Предмети
+					</Link>
+					{isAuthenticated && (
+						<Link to="/account" className="hover:underline">
+							Профил
+						</Link>
+					)}
+					{isAuthenticated ? (
+						<button
+							onClick={handleLogout}
+							className="bg-red-500 hover:bg-red-600 px-3 py-1 rounded"
+						>
+							Одјави се
+						</button>
+					) : (
+						<>
+							<Link to="/login" className="hover:underline">
+								Најави се
+							</Link>
+							<Link to="/register" className="hover:underline">
+								Регистрирај се
+							</Link>
+						</>
+					)}
+				</div>
+			</div>
+
+			{menuOpen && (
+				<div className="sm:hidden mt-3 flex flex-col space-y-2 text-sm">
+					<Link to="/subjects" className="hover:underline">
+						Предмети
+					</Link>
+					{isAuthenticated && (
+						<Link to="/account" className="hover:underline">
+							Профил
+						</Link>
+					)}
+					{isAuthenticated ? (
+						<button
+							onClick={() => {
+								handleLogout();
+								setMenuOpen(false);
+							}}
+							className="bg-red-500 hover:bg-red-600 px-3 py-1 rounded"
+						>
+							Одјави се
+						</button>
+					) : (
+						<>
+							<Link to="/login" onClick={() => setMenuOpen(false)}>
+								Најави се
+							</Link>
+							<Link to="/register" onClick={() => setMenuOpen(false)}>
+								Регистрирај се
+							</Link>
+						</>
+					)}
+				</div>
+			)}
+		</nav>
+	);
 };
 
 export default Navbar;
-
Index: frontend/src/components/StudentForm.tsx
===================================================================
--- frontend/src/components/StudentForm.tsx	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/components/StudentForm.tsx	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -1,3 +1,10 @@
 import { useEffect, useState } from "react";
+import {
+	EVALUATIONS,
+	EVALUATIONS_MAP,
+	PROGRAMS,
+	STUDY_EFFORT,
+	YEARS,
+} from "../constants/subjects";
 import { useAuth } from "../hooks/useAuth";
 import { Programs, StudentData, Subject } from "./types";
@@ -5,16 +12,13 @@
 interface StudentFormProps {
 	formData: StudentData | null;
-	subjects: Subject[];
+}
+
+interface DistinctSubjectData {
+	tags: string[];
 	professors: string[];
+	technologies: string[];
 }
 
-const STUDY_TRACKS = ["SIIS23", "IE23", "PIT23", "KI23", "KN23", "IMB23"];
-const STUDY_EFFORT = [1, 2, 3, 4, 5];
-const YEARS = [1, 2, 3, 4];
-const DOMAINS = ["Web Dev", "AI", "Data Science", "Немам"];
-const TECHNOLOGIES = ["React", "Django", "Flutter", "Немам"];
-const EVALUATIONS = ["Испити", "Проекти", "Семинарски", "Немам"];
-
-const StudentForm = ({ formData, subjects, professors }: StudentFormProps) => {
+const StudentForm = ({ formData }: StudentFormProps) => {
 	const { accessToken } = useAuth();
 	const [isSubmitted, setIsSubmitted] = useState(false);
@@ -34,4 +38,6 @@
 		formData?.preferred_domains || []
 	);
+	const [electiveSearchTerm, setElectiveSearchTerm] = useState("");
+	const [professorsSearchTerm, setProfessorSearchTerm] = useState("");
 	const [technologies, setTechnologies] = useState<string[]>(
 		formData?.preferred_technologies || []
@@ -52,4 +58,13 @@
 		isError: false,
 	});
+	const [showElective, setShowElective] = useState(false);
+	const [showProfessors, setShowProfessors] = useState(false);
+	const [subjects, setSubjects] = useState<Subject[]>([]);
+	const [distinctSubjectData, setDistinctSubjectData] =
+		useState<DistinctSubjectData>({
+			tags: [],
+			professors: [],
+			technologies: [],
+		});
 
 	// Update form when formData changes (e.g., after fetching user data)
@@ -68,4 +83,39 @@
 	}, [formData]);
 
+	useEffect(() => {
+		const fetchSubjects = async () => {
+			try {
+				const resSubjects = await fetch("http://localhost:8000/subjects");
+				if (resSubjects.ok) {
+					const subJson: Subject[] = await resSubjects.json();
+					setSubjects(subJson || []);
+					const allProfessors: string[] = subJson
+						.flatMap((subject: Subject) => subject.subject_info.professors)
+						.filter((p): p is string => typeof p === "string");
+					const uniqueProfessors = Array.from(new Set(allProfessors));
+					const allProfessors_ = uniqueProfessors
+						.filter((prof) => prof.trim().toLowerCase() !== "сите професори")
+						.sort((a, b) => a.localeCompare(b));
+					setDistinctSubjectData(() => ({
+						tags: Array.from(
+							new Set(subJson.flatMap((subject) => subject.subject_info.tags))
+						).sort((a, b) => a.localeCompare(b)),
+						technologies: Array.from(
+							new Set(
+								subJson
+									.flatMap((subject) => subject.subject_info.technologies)
+									.filter((tech) => tech != "any" && tech != "")
+							)
+						).sort((a, b) => a.localeCompare(b)),
+						professors: allProfessors_,
+					}));
+				}
+			} catch (error) {
+				console.error("Error fetching subjects:", error);
+			}
+		};
+
+		fetchSubjects();
+	}, []);
 	const validateForm = () => {
 		const errors: { [key: string]: string } = {};
@@ -132,12 +182,14 @@
 			preferred_domains: domains,
 			preferred_technologies: technologies,
-			preferred_evaluation: evaluation,
+			preferred_evaluation: evaluation.map(
+				(ev) => EVALUATIONS_MAP[ev as keyof typeof EVALUATIONS_MAP]
+			),
 			favorite_professors: favoriteProfs,
 		};
-
 		try {
 			// For updating existing form data use PATCH instead of PUT for partial updates
 			const method = formData?.current_year ? "PATCH" : "POST";
 			const endpoint = "http://localhost:8000/auth/form/";
+			console.log(payload);
 			const res = await fetch(endpoint, {
 				method,
@@ -186,9 +238,20 @@
 		? subjects
 				.filter(
-					(subj) => subj.subject_info.elective_for.includes(studyTrack)
+					(subj) =>
+						subj.subject_info.elective_for.includes(studyTrack) &&
+						(electiveSearchTerm == "" ||
+							subj.name
+								.toLowerCase()
+								.includes(electiveSearchTerm.toLowerCase()))
 					// subj.subject_info.semester <= year * 2
 				)
 				.sort((a, b) => a.subject_info.semester - b.subject_info.semester)
 		: [];
+
+	const filteredProfessors = distinctSubjectData.professors.filter(
+		(prof) =>
+			professorsSearchTerm == "" ||
+			prof.toLowerCase().includes(professorsSearchTerm.toLowerCase())
+	);
 
 	return (
@@ -236,5 +299,5 @@
 					>
 						<option value="">Одбери смер</option>
-						{STUDY_TRACKS.map((track) => (
+						{PROGRAMS.map((track) => (
 							<option key={track} value={track}>
 								{track}
@@ -277,26 +340,44 @@
 					Положени задолжителни предмети
 				</h3>
-				<button
-					className="mb-2 px-3 py-2 border rounded-md transition-colors duration-200 bg-gray-200 border-gray-700"
-					disabled={filteredMandatorySubjects.length === 0}
-					type="button"
-					onClick={() => {
-						passedSubjects.some((subject) =>
-							filteredMandatorySubjects.includes(subject)
-						)
-							? setPassedSubjects((prev) =>
-									prev.filter(
-										(subject) => !filteredMandatorySubjects.includes(subject)
-									)
-							  )
-							: setPassedSubjects((prev) => [
-									...prev,
-									...filteredMandatorySubjects,
-							  ]);
-					}}
-				>
-					Одбери ги сите
-				</button>
-				{/* </div> */}
+				{studyTrack != "" && (
+					<div className="flex items-center mb-2">
+						<label className="inline-flex items-center p-1 rounded">
+							<input
+								type="checkbox"
+								className="form-checkbox h-5 w-5 accent-green-600"
+								disabled={filteredMandatorySubjects.length === 0}
+								checked={filteredMandatorySubjects.every((subject) =>
+									passedSubjects.some((passed) => passed.id === subject.id)
+								)}
+								onChange={() => {
+									const allSelected = filteredMandatorySubjects.every(
+										(subject) =>
+											passedSubjects.some((passed) => passed.id === subject.id)
+									);
+
+									if (allSelected) {
+										setPassedSubjects((prev) =>
+											prev.filter(
+												(subject) =>
+													!filteredMandatorySubjects.some(
+														(mandatorySubj) => mandatorySubj.id === subject.id
+													)
+											)
+										);
+									} else {
+										setPassedSubjects((prev) => {
+											const newSubjects = filteredMandatorySubjects.filter(
+												(subject) =>
+													!prev.some((passed) => passed.id === subject.id)
+											);
+											return [...prev, ...newSubjects];
+										});
+									}
+								}}
+							/>
+							<span className="ml-2 text-md text-gray-700">Одбери ги сите</span>
+						</label>
+					</div>
+				)}
 				{filteredMandatorySubjects.length > 0 ? (
 					<div className="flex flex-wrap gap-2">
@@ -313,6 +394,6 @@
                     ${
 											isSelected
-												? "bg-green-500 text-white border-green-600 shadow-md"
-												: "bg-white text-gray-800 border-gray-300 hover:bg-gray-100"
+												? "bg-green-500 border-green-600 text-green-50"
+												: "bg-white hover:bg-gray-50 border-gray-300"
 										}`}
 									aria-pressed={isSelected}
@@ -342,5 +423,5 @@
 						{!studyTrack
 							? "Одбери смер и година за да се прикажат предметите."
-							: "Нема задолжителни предмети за избраниот смер и година."}
+							: "Нема такви задолжителни предмети"}
 					</p>
 				)}
@@ -351,47 +432,67 @@
 				)}
 			</div>
-
 			<div>
-				<h3 className="text-lg font-medium text-gray-900 mb-2">
-					Положени изборни предмети
-				</h3>
+				<div className="flex items-center mb-2 gap-7">
+					<h3 className="text-lg font-medium text-gray-900">
+						Положени изборни предмети
+					</h3>
+					{studyTrack != "" && (
+						<input
+							onChange={(e) => setElectiveSearchTerm(e.target.value)}
+							value={electiveSearchTerm}
+							type="text"
+							className="w-60 px-3 py-2.5 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 text-gray-900 text-sm"
+							placeholder="Пребарај предмет"
+						/>
+					)}
+				</div>
 				{filteredElectiveSubjects.length > 0 ? (
 					<div className="flex flex-wrap gap-2">
-						{filteredElectiveSubjects.map((subject) => {
-							const isSelected = passedSubjects.some(
-								(s) => s.id === subject.id
-							);
-							return (
-								<button
-									type="button"
-									key={subject.id}
-									onClick={() => toggleSubject(subject)}
-									className={`flex items-center gap-2 px-3 py-2 border rounded-md transition-all duration-200 
-                    ${
-											isSelected
-												? "bg-green-500 text-white border-green-600 shadow-md"
-												: "bg-white text-gray-800 border-gray-300 hover:bg-gray-100"
-										}`}
-									aria-pressed={isSelected}
-								>
-									{isSelected && (
-										<svg
-											className="w-5 h-5"
-											fill="none"
-											stroke="currentColor"
-											viewBox="0 0 24 24"
-										>
-											<path
-												strokeLinecap="round"
-												strokeLinejoin="round"
-												strokeWidth="2"
-												d="M5 13l4 4L19 7"
-											></path>
-										</svg>
-									)}
-									<span>{subject.name}</span>
-								</button>
-							);
-						})}
+						{filteredElectiveSubjects
+							.slice(0, showElective ? undefined : 10)
+							.map((subject) => {
+								const isSelected = passedSubjects.some(
+									(s) => s.id === subject.id
+								);
+								return (
+									<button
+										type="button"
+										key={subject.id}
+										onClick={() => toggleSubject(subject)}
+										className={`flex items-center gap-2 px-3 py-2 border rounded-md transition-all duration-200 
+                    					${
+																isSelected
+																	? "bg-green-500 text-white border-green-600 shadow-md"
+																	: "bg-white text-gray-800 border-gray-300 hover:bg-gray-100"
+															}`}
+										aria-pressed={isSelected}
+									>
+										{isSelected && (
+											<svg
+												className="w-5 h-5"
+												fill="none"
+												stroke="currentColor"
+												viewBox="0 0 24 24"
+											>
+												<path
+													strokeLinecap="round"
+													strokeLinejoin="round"
+													strokeWidth="2"
+													d="M5 13l4 4L19 7"
+												></path>
+											</svg>
+										)}
+										<span>{subject.name}</span>
+									</button>
+								);
+							})}
+						{filteredElectiveSubjects.length > 10 && (
+							<button
+								onClick={() => setShowElective(!showElective)}
+								className="px-3 py-2 rounded-md transition-colors duration-200 bg-blue text-blue-500"
+							>
+								{showElective ? "Прикажи помалку" : "Прикажи повеќе"}
+							</button>
+						)}
 					</div>
 				) : (
@@ -399,5 +500,5 @@
 						{!studyTrack
 							? "Одбери смер и година за да се прикажат предметите"
-							: "Нема изборни предмети за избраниот смер и година"}
+							: "Нема такви изборни предмети"}
 					</p>
 				)}
@@ -408,16 +509,41 @@
 					Вложен труд при учење
 				</h3>
-				<select
-					value={studyEffort}
-					onChange={(e) => setStudyEffort(e.target.value)}
-					className="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
-				>
-					<option value="">Одбери колку труд вложуваш при учење</option>
+				<div className="flex flex-wrap gap-3">
 					{STUDY_EFFORT.map((effort) => (
-						<option key={effort} value={effort}>
-							{effort}
-						</option>
+						<label
+							key={effort}
+							className={`flex items-center px-3 py-2 rounded-md cursor-pointer transition-colors ${
+								studyEffort == effort && "font-bold"
+							}`}
+						>
+							<input
+								type="checkbox"
+								checked={studyEffort == effort}
+								onChange={() =>
+									setStudyEffort(studyEffort == effort ? "" : effort)
+								}
+								className="form-checkbox h-4 w-5 mr-2 accent-green-600"
+							/>
+							<span>{effort}</span>
+						</label>
 					))}
-				</select>
+					{/* tuka */}
+					{/* <div className="w-full mt-4 flex flex-col items-center">
+						<input
+							type="range"
+							min={1}
+							max={5}
+							step={1}
+							value={studyEffort || 1}
+							onChange={(e) => setStudyEffort(Number(e.target.value))}
+							className="w-64 accent-blue-600"
+						/>
+						<div className="flex justify-between w-64 text-xs mt-1 text-gray-500">
+							{STUDY_EFFORT.map((effort) => (
+								<span key={effort}>{effort}</span>
+							))}
+						</div>
+					</div> */}
+				</div>
 				{validationErrors.studyEffort && (
 					<p className="mt-1 text-sm text-red-600 font-bold">
@@ -432,5 +558,5 @@
 				</h3>
 				<div className="flex flex-wrap gap-2">
-					{DOMAINS.map((domain) => {
+					{distinctSubjectData.tags.map((domain) => {
 						const isSelected = domains.includes(domain);
 						const isNemamSelected = domains.includes("Немам");
@@ -476,5 +602,5 @@
 				</h3>
 				<div className="flex flex-wrap gap-2">
-					{TECHNOLOGIES.map((tech) => {
+					{distinctSubjectData.technologies.map((tech) => {
 						const isSelected = technologies.includes(tech);
 						const isNemamSelected = technologies.includes("Немам");
@@ -529,4 +655,5 @@
 								key={ev}
 								onClick={() => {
+									// todo: sredi ova
 									if (ev === "Немам") {
 										if (evaluation.includes("Немам")) {
@@ -562,24 +689,48 @@
 
 			<div>
-				<h3 className="text-lg font-medium text-gray-900 mb-2">
-					Омилени професори
-				</h3>
+				<div className="flex items-center mb-2 gap-7">
+					<h3 className="text-lg font-medium text-gray-900 mb-2">
+						Омилени професори
+					</h3>
+					{studyTrack != "" && (
+						<input
+							onChange={(e) => setProfessorSearchTerm(e.target.value)}
+							value={professorsSearchTerm}
+							type="text"
+							className="w-60 px-3 py-2.5 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 text-gray-900 text-sm"
+							placeholder="Пребарај професор"
+						/>
+					)}
+				</div>
 				<div className="flex flex-wrap gap-2">
-					{professors.map((prof) => (
+					{filteredProfessors
+						.slice(0, showProfessors ? undefined : 10)
+						.map((prof) => (
+							<button
+								key={prof}
+								type="button"
+								onClick={() =>
+									toggleSelection(prof, setFavoriteProfs, favoriteProfs)
+								}
+								className={`px-3 py-2 border rounded-md transition-colors ${
+									favoriteProfs.includes(prof)
+										? "bg-pink-100 border-pink-300 text-pink-800"
+										: "bg-white hover:bg-gray-50 border-gray-300"
+								}`}
+							>
+								{prof}
+							</button>
+						))}
+					{filteredProfessors.length == 0 && (
+						<p className="text-gray-500 italic">Нема таков професор</p>
+					)}
+					{filteredProfessors.length > 10 && (
 						<button
-							key={prof}
-							type="button"
-							onClick={() =>
-								toggleSelection(prof, setFavoriteProfs, favoriteProfs)
-							}
-							className={`px-3 py-2 border rounded-md transition-colors ${
-								favoriteProfs.includes(prof)
-									? "bg-pink-100 border-pink-300 text-pink-800"
-									: "bg-white hover:bg-gray-50 border-gray-300"
-							}`}
+							onClick={() => setShowProfessors(!showProfessors)}
+							className="px-3 py-2 rounded-md transition-colors duration-200 bg-blue text-blue-500"
 						>
-							{prof}
+							{showProfessors ? "Прикажи помалку" : "Прикажи повеќе"}
 						</button>
-					))}
+					)}
 				</div>
 			</div>
Index: frontend/src/components/SubjectCatalog/FilterSidebar.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/FilterSidebar.tsx	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/components/SubjectCatalog/FilterSidebar.tsx	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -1,264 +1,304 @@
+import { useState } from "react";
 import { PROGRAMS } from "../../constants/subjects";
 import { Filters } from "../types";
 import { resetFilters } from "./utils";
 interface FilterSidebarProps {
-  setSearchTerm: (term: string) => void;
-  setProfessorSearchTerm: (term: string) => void;
-  setAssistantSearchTerm: (term: string) => void;
-  setFilters: (filters: (prev: Filters) => Filters) => void;
-  filters: Filters;
+	setSearchTerm: (term: string) => void;
+	setProfessorSearchTerm: (term: string) => void;
+	setAssistantSearchTerm: (term: string) => void;
+	setFilters: (filters: (prev: Filters) => Filters) => void;
+	filters: Filters;
+	tags: string[];
 }
 
 const FilterSidebar = ({
-  setSearchTerm,
-  setProfessorSearchTerm,
-  setAssistantSearchTerm,
-  setFilters,
-  filters,
+	setSearchTerm,
+	setProfessorSearchTerm,
+	setAssistantSearchTerm,
+	setFilters,
+	filters,
+	tags,
 }: FilterSidebarProps) => {
-  return (
-    <div className="">
-      <div className="flex justify-between items-center mb-4">
-        <h2 className="text-lg font-semibold">Филтри</h2>
-        <button
-          onClick={() =>
-            resetFilters(
-              setSearchTerm,
-              setProfessorSearchTerm,
-              setAssistantSearchTerm,
-              setFilters
-            )
-          }
-          className="text-sm text-gray-600 hover:text-gray-900"
-        >
-          Избриши
-        </button>
-      </div>
-      <div className="mb-4">
-        {/* filter by season*/}
-        <div className="space-y-1 mb-4">
-          <h3 className="font-medium mb-2">Семестар</h3>
-          <div className="grid grid-cols-2">
-            {["Летен", "Зимски"].map((season) => {
-              const seasonValue = season === "Летен" ? "S" : "W";
-              return (
-                <div key={season} className="flex items-center space-x-2">
-                  <input
-                    type="checkbox"
-                    name="season"
-                    id={seasonValue}
-                    onChange={() =>
-                      setFilters((prev) => ({
-                        ...prev,
-                        season: prev.season === seasonValue ? "" : seasonValue,
-                      }))
-                    }
-                    checked={filters.season === seasonValue}
-                    className="h-4 w-4 rounded border-gray-300 text-blue-600"
-                  />
-                  <label
-                    htmlFor={seasonValue}
-                    className="ml-2 text-sm text-gray-700"
-                  >
-                    {season}
-                  </label>
-                </div>
-              );
-            })}
-          </div>
-        </div>
-
-        {/* filter by semester*/}
-        <div className="space-y-1 mb-4">
-          {/* <h3 className="font-medium mb-2">Семестар</h3> */}
-          <div className="grid grid-cols-4 gap-2">
-            {Array.from(Array(8)).map((_, index) => {
-              const i = index + 1;
-              return (
-                <div key={i} className="flex items-center space-x-2">
-                  <input
-                    type="checkbox"
-                    name="season"
-                    id={`s${i}`}
-                    onChange={() =>
-                      setFilters((prev) => ({
-                        ...prev,
-                        semester: prev.semester.includes(i)
-                          ? prev.semester.filter((item) => item !== i)
-                          : [...prev.semester, i],
-                      }))
-                    }
-                    checked={filters.semester.includes(i)}
-                    className="h-4 w-4 rounded border-gray-300 text-blue-600"
-                  />
-                  <label htmlFor={`s${i}`} className="text-sm text-gray-700">
-                    {i}
-                  </label>
-                </div>
-              );
-            })}
-          </div>
-        </div>
-        {/* filter by level */}
-        <div className="space-y-1 mb-4">
-          <h3 className="font-medium mb-2">Ниво</h3>
-          <div className="grid grid-cols-3">
-            {Array.from(Array(3)).map((_, index) => {
-              const i = index + 1;
-              const level = `L${i}`;
-              return (
-                <div key={i} className="flex items-center space-x-2">
-                  <input
-                    type="checkbox"
-                    name="level"
-                    id={level}
-                    onChange={() =>
-                      setFilters((prev) => ({
-                        ...prev,
-                        level: prev.level.includes(i)
-                          ? prev.level.filter((item) => item !== i)
-                          : [...prev.level, i],
-                      }))
-                    }
-                    checked={filters.level.includes(i)}
-                    className="h-4 w-4 rounded border-gray-300 text-blue-600"
-                  />
-                  <label
-                    htmlFor={`s${level}`}
-                    className="text-sm text-gray-700"
-                  >
-                    {level}
-                  </label>
-                </div>
-              );
-            })}
-          </div>
-        </div>
-        {/* filter by activation*/}
-        <div className="space-y-1 mb-4">
-          <h3 className="font-medium mb-2">Активирани</h3>
-          <div className="grid grid-cols-2">
-            {["Активирани", "Неактивирани"].map((value) => {
-              const activeValue =
-                value === "Активирани" ? "activated" : "not_activated";
-              return (
-                <div key={activeValue} className="flex items-center space-x-2">
-                  <input
-                    type="checkbox"
-                    name="season"
-                    id={activeValue}
-                    onChange={() =>
-                      setFilters((prev) => ({
-                        ...prev,
-                        activated:
-                          prev.activated === activeValue ? "" : activeValue,
-                      }))
-                    }
-                    checked={filters.activated === activeValue}
-                    className="h-4 w-4 rounded border-gray-300 text-blue-600"
-                  />
-                  <label
-                    htmlFor={activeValue}
-                    className="ml-2 text-sm text-gray-700"
-                  >
-                    {value}
-                  </label>
-                </div>
-              );
-            })}
-          </div>
-        </div>
-        {/* filter by mandatoryFor */}
-        <div className="space-y-1 mb-4">
-          <h3 className="font-medium mb-2">Задолжителен за:</h3>
-          <div className="grid grid-cols-3 gap-2">
-            {PROGRAMS.map((program) => {
-              const programName = program.replace(/\d+$/, "");
-              return (
-                <div key={program} className="flex items-center space-x-2">
-                  <input
-                    type="checkbox"
-                    name="level"
-                    id={program}
-                    onChange={() =>
-                      setFilters((prev) => ({
-                        ...prev,
-                        mandatoryFor: prev.mandatoryFor.includes(program)
-                          ? prev.mandatoryFor.filter((item) => item !== program)
-                          : [...prev.mandatoryFor, program],
-                      }))
-                    }
-                    checked={filters.mandatoryFor.includes(program)}
-                    className="h-4 w-4 rounded border-gray-300 text-blue-600"
-                  />
-                  <label
-                    htmlFor={`s${program}`}
-                    className="text-sm text-gray-700"
-                  >
-                    {programName}
-                  </label>
-                </div>
-              );
-            })}
-          </div>
-        </div>
-        {/* filter by electiveFor */}
-        <div className="space-y-1 mb-6">
-          <h3 className="font-medium mb-2">Изборен за:</h3>
-          <div className="grid grid-cols-3 gap-2">
-            {PROGRAMS.map((program) => {
-              const programName = program.replace(/\d+$/, "");
-              return (
-                <div key={program} className="flex items-center space-x-2">
-                  <input
-                    type="checkbox"
-                    name="level"
-                    id={program}
-                    onChange={() =>
-                      setFilters((prev) => ({
-                        ...prev,
-                        electiveFor: prev.electiveFor.includes(program)
-                          ? prev.electiveFor.filter((item) => item !== program)
-                          : [...prev.electiveFor, program],
-                      }))
-                    }
-                    checked={filters.electiveFor.includes(program)}
-                    className="h-4 w-4 rounded border-gray-300 text-blue-600"
-                  />
-                  <label
-                    htmlFor={`s${program}`}
-                    className="text-sm text-gray-700"
-                  >
-                    {programName}
-                  </label>
-                </div>
-              );
-            })}
-          </div>
-        </div>
-        {/* filter by prereq */}
-        <div className="space-y-1 mb-4">
-          <div className="flex items-center space-x-2">
-            <input
-              type="checkbox"
-              name="prereq"
-              id="prereq"
-              onChange={() =>
-                setFilters((prev) => ({
-                  ...prev,
-                  hasPrerequisites: !prev.hasPrerequisites,
-                }))
-              }
-              checked={filters.hasPrerequisites}
-              className="h-4 w-4 rounded border-gray-300 text-blue-600"
-            />
-            <label htmlFor={"prereq"} className="text-sm text-gray-700">
-              Предметот нема предуслови
-            </label>
-          </div>
-        </div>
-      </div>
-    </div>
-  );
+	const [showTags, setShowTags] = useState(false);
+	return (
+		<div className="">
+			<div className="flex justify-between items-center mb-4">
+				<h2 className="text-lg font-semibold">Филтри</h2>
+				<button
+					onClick={() =>
+						resetFilters(
+							setSearchTerm,
+							setProfessorSearchTerm,
+							setAssistantSearchTerm,
+							setFilters
+						)
+					}
+					className="text-sm text-gray-600 hover:text-gray-900"
+				>
+					Избриши
+				</button>
+			</div>
+			<div className="mb-4">
+				{/* filter by season*/}
+				<div className="space-y-1 mb-4">
+					<h3 className="font-medium mb-2">Семестар</h3>
+					<div className="grid grid-cols-2">
+						{["Летен", "Зимски"].map((season) => {
+							const seasonValue = season === "Летен" ? "S" : "W";
+							return (
+								<div key={season} className="flex items-center space-x-2">
+									<input
+										type="checkbox"
+										name="season"
+										id={seasonValue}
+										onChange={() =>
+											setFilters((prev) => ({
+												...prev,
+												season: prev.season === seasonValue ? "" : seasonValue,
+											}))
+										}
+										checked={filters.season === seasonValue}
+										className="h-4 w-4 rounded border-gray-300 text-blue-600"
+									/>
+									<label
+										htmlFor={seasonValue}
+										className="ml-2 text-sm text-gray-700"
+									>
+										{season}
+									</label>
+								</div>
+							);
+						})}
+					</div>
+				</div>
+				{/* filter by semester*/}
+				<div className="space-y-1 mb-4">
+					{/* <h3 className="font-medium mb-2">Семестар</h3> */}
+					<div className="grid grid-cols-4 gap-2">
+						{Array.from(Array(8)).map((_, index) => {
+							const i = index + 1;
+							return (
+								<div key={i} className="flex items-center space-x-2">
+									<input
+										type="checkbox"
+										name="season"
+										id={`s${i}`}
+										onChange={() =>
+											setFilters((prev) => ({
+												...prev,
+												semester: prev.semester.includes(i)
+													? prev.semester.filter((item) => item !== i)
+													: [...prev.semester, i],
+											}))
+										}
+										checked={filters.semester.includes(i)}
+										className="h-4 w-4 rounded border-gray-300 text-blue-600"
+									/>
+									<label htmlFor={`s${i}`} className="text-sm text-gray-700">
+										{i}
+									</label>
+								</div>
+							);
+						})}
+					</div>
+				</div>
+				{/* filter by level */}
+				<div className="space-y-1 mb-4">
+					<h3 className="font-medium mb-2">Ниво</h3>
+					<div className="grid grid-cols-3">
+						{Array.from(Array(3)).map((_, index) => {
+							const i = index + 1;
+							const level = `L${i}`;
+							return (
+								<div key={i} className="flex items-center space-x-2">
+									<input
+										type="checkbox"
+										name="level"
+										id={level}
+										onChange={() =>
+											setFilters((prev) => ({
+												...prev,
+												level: prev.level.includes(i)
+													? prev.level.filter((item) => item !== i)
+													: [...prev.level, i],
+											}))
+										}
+										checked={filters.level.includes(i)}
+										className="h-4 w-4 rounded border-gray-300 text-blue-600"
+									/>
+									<label
+										htmlFor={`s${level}`}
+										className="text-sm text-gray-700"
+									>
+										{level}
+									</label>
+								</div>
+							);
+						})}
+					</div>
+				</div>
+				{/* filter by activation*/}
+				<div className="space-y-1 mb-4">
+					<h3 className="font-medium mb-2">Активирани</h3>
+					<div className="grid grid-cols-2">
+						{["Активирани", "Неактивирани"].map((value) => {
+							const activeValue =
+								value === "Активирани" ? "activated" : "not_activated";
+							return (
+								<div key={activeValue} className="flex items-center space-x-2">
+									<input
+										type="checkbox"
+										name="season"
+										id={activeValue}
+										onChange={() =>
+											setFilters((prev) => ({
+												...prev,
+												activated:
+													prev.activated === activeValue ? "" : activeValue,
+											}))
+										}
+										checked={filters.activated === activeValue}
+										className="h-4 w-4 rounded border-gray-300 text-blue-600"
+									/>
+									<label
+										htmlFor={activeValue}
+										className="ml-2 text-sm text-gray-700"
+									>
+										{value}
+									</label>
+								</div>
+							);
+						})}
+					</div>
+				</div>
+				{/* filter by mandatoryFor */}
+				<div className="space-y-1 mb-4">
+					<h3 className="font-medium mb-2">Задолжителен за:</h3>
+					<div className="grid grid-cols-3 gap-2">
+						{PROGRAMS.map((program) => {
+							const programName = program.replace(/\d+$/, "");
+							return (
+								<div key={program} className="flex items-center space-x-2">
+									<input
+										type="checkbox"
+										name="level"
+										id={program}
+										onChange={() =>
+											setFilters((prev) => ({
+												...prev,
+												mandatoryFor: prev.mandatoryFor.includes(program)
+													? prev.mandatoryFor.filter((item) => item !== program)
+													: [...prev.mandatoryFor, program],
+											}))
+										}
+										checked={filters.mandatoryFor.includes(program)}
+										className="h-4 w-4 rounded border-gray-300 text-blue-600"
+									/>
+									<label
+										htmlFor={`s${program}`}
+										className="text-sm text-gray-700"
+									>
+										{programName}
+									</label>
+								</div>
+							);
+						})}
+					</div>
+				</div>
+				{/* filter by electiveFor */}
+				<div className="space-y-1 mb-6">
+					<h3 className="font-medium mb-2">Изборен за:</h3>
+					<div className="grid grid-cols-3 gap-2">
+						{PROGRAMS.map((program) => {
+							const programName = program.replace(/\d+$/, "");
+							return (
+								<div key={program} className="flex items-center space-x-2">
+									<input
+										type="checkbox"
+										name="level"
+										id={program}
+										onChange={() =>
+											setFilters((prev) => ({
+												...prev,
+												electiveFor: prev.electiveFor.includes(program)
+													? prev.electiveFor.filter((item) => item !== program)
+													: [...prev.electiveFor, program],
+											}))
+										}
+										checked={filters.electiveFor.includes(program)}
+										className="h-4 w-4 rounded border-gray-300 text-blue-600"
+									/>
+									<label
+										htmlFor={`s${program}`}
+										className="text-sm text-gray-700"
+									>
+										{programName}
+									</label>
+								</div>
+							);
+						})}
+					</div>
+				</div>
+				{/* filter by prereq */}
+				<div className="space-y-1 mb-4">
+					<div className="flex items-center space-x-2">
+						<input
+							type="checkbox"
+							name="prereq"
+							id="prereq"
+							onChange={() =>
+								setFilters((prev) => ({
+									...prev,
+									hasPrerequisites: !prev.hasPrerequisites,
+								}))
+							}
+							checked={filters.hasPrerequisites}
+							className="h-4 w-4 rounded border-gray-300 text-blue-600"
+						/>
+						<label htmlFor={"prereq"} className="text-sm text-gray-700">
+							Предметот нема предуслови
+						</label>
+					</div>
+				</div>
+				<div className="space-y-1 mb-4">
+					<h3 className="font-medium mb-2">Тагови:</h3>
+					<div className="grid grid-cols-1 gap-2">
+						{tags.slice(0, showTags ? undefined : 4).map((tag) => {
+							return (
+								<div key={tag} className="flex items-center space-x-2">
+									<input
+										type="checkbox"
+										name="level"
+										id={tag}
+										onChange={() =>
+											setFilters((prev) => ({
+												...prev,
+												tags: prev.tags.includes(tag)
+													? prev.tags.filter((item) => item !== tag)
+													: [...prev.tags, tag],
+											}))
+										}
+										checked={filters.tags.includes(tag)}
+										className="h-4 w-4 rounded border-gray-300 text-blue-600"
+									/>
+									<label htmlFor={`${tag}`} className="text-sm text-gray-700">
+										{tag}
+									</label>
+								</div>
+							);
+						})}
+						{tags.length > 4 && (
+							<button
+								onClick={() => setShowTags(!showTags)}
+								className="text-sm text-blue-600 hover:text-blue-800"
+							>
+								{showTags ? "Прикажи помалку" : "Прикажи повеќе"}
+							</button>
+						)}
+					</div>
+				</div>
+			</div>
+		</div>
+	);
 };
 
Index: frontend/src/components/SubjectCatalog/SubjectCatalog.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SubjectCatalog.tsx	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/components/SubjectCatalog/SubjectCatalog.tsx	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -1,3 +1,4 @@
 import { useEffect, useState } from "react";
+import { Filters, Subject } from "../types";
 import FilterSidebar from "./FilterSidebar";
 import SkeletonCard from "./SkeletonCard";
@@ -5,187 +6,193 @@
 import SubjectList from "./SubjectList";
 import SubjectModal from "./SubjectModal";
-import { Filters, Subject } from "../types";
 import { filterSubjects, getRandomStaff, resetFilters } from "./utils";
 const SubjectCatalog = () => {
-  const [visibleCourses, setVisibleCourses] = useState<number>(10);
-  const [searchTerm, setSearchTerm] = useState<string>("");
-  const [professorSearchTerm, setProfessorSearchTerm] = useState<string>("");
-  const [assistantSearchTerm, setAssistantSearchTerm] = useState<string>("");
-  const [selectedSubject, setSelectedSubject] = useState<Subject | null>(null);
-  const [subjectData, setSubjectData] = useState<Subject[]>([]);
-  const [isLoaded, setIsLoaded] = useState(false);
-  const [randomStaff, setRandomStaff] = useState(["", ""]);
-  const [showModal, setShowModal] = useState(false);
-  const [filters, setFilters] = useState<Filters>({
-    season: "",
-    semester: [],
-    level: [],
-    activated: "",
-    mandatoryFor: [],
-    electiveFor: [],
-    professors: [],
-    assistants: [],
-    hasPrerequisites: false,
-  });
+	const [visibleCourses, setVisibleCourses] = useState<number>(10);
+	const [searchTerm, setSearchTerm] = useState<string>("");
+	const [professorSearchTerm, setProfessorSearchTerm] = useState<string>("");
+	const [assistantSearchTerm, setAssistantSearchTerm] = useState<string>("");
+	const [selectedSubject, setSelectedSubject] = useState<Subject | null>(null);
+	const [subjectData, setSubjectData] = useState<Subject[]>([]);
+	const [isLoaded, setIsLoaded] = useState(false);
+	const [randomStaff, setRandomStaff] = useState(["", ""]);
+	const [showModal, setShowModal] = useState(false);
+	const [tags, setTags] = useState<string[]>([]);
+	const [filters, setFilters] = useState<Filters>({
+		season: "",
+		semester: [],
+		level: [],
+		activated: "",
+		mandatoryFor: [],
+		electiveFor: [],
+		professors: [],
+		assistants: [],
+		tags: [],
+		hasPrerequisites: false,
+	});
+	const filteredSubjects: Subject[] = filterSubjects({
+		subjectData,
+		searchTerm,
+		professorSearchTerm,
+		assistantSearchTerm,
+		filters,
+	});
 
-  const filteredSubjects: Subject[] = filterSubjects({
-    subjectData,
-    searchTerm,
-    professorSearchTerm,
-    assistantSearchTerm,
-    filters,
-  });
+	useEffect(() => {
+		const fetchData = async () => {
+			const response = await fetch("http://localhost:8000/subjects");
+			const data = await response.json();
+			console.log(data);
+			setSubjectData(data);
+			setIsLoaded(true);
+		};
+		fetchData();
+	}, []);
 
-  useEffect(() => {
-    const fetchData = async () => {
-      const response = await fetch("http://localhost:8000/subjects");
-      const data = await response.json();
-      console.log(data);
-      setSubjectData(data);
-      setIsLoaded(true);
-    };
-    fetchData();
-  }, []);
+	useEffect(() => {
+		getRandomStaff(subjectData, setRandomStaff);
+		setTags(
+			Array.from(
+				new Set(filteredSubjects.flatMap((sub) => sub.subject_info.tags))
+			)
+		);
+		console.log(
+			Array.from(
+				new Set(
+					filteredSubjects.flatMap((sub) => sub.subject_info.technologies)
+				)
+			)
+		);
+	}, [subjectData]);
 
-  useEffect(() => {
-    getRandomStaff(subjectData, setRandomStaff);
-  }, [subjectData]);
+	const loadMore = () => {
+		setVisibleCourses((prev) => prev + 10);
+	};
 
-  const loadMore = () => {
-    setVisibleCourses((prev) => prev + 10);
-  };
+	const openSubjectDetails = (subject: Subject) => {
+		setSelectedSubject(
+			subjectData.find((item) => item.id == subject.id) ?? null
+		);
+		setShowModal(true);
+	};
 
-  const openSubjectDetails = (subject: Subject) => {
-    setSelectedSubject(
-      subjectData.find((item) => item.id == subject.id) ?? null
-    );
-    setShowModal(true);
-  };
+	const closeModal = () => {
+		setShowModal(false);
+	};
 
-  const closeModal = () => {
-    setShowModal(false);
-  };
+	const getSubjectPrerequisites = (): "Нема предуслов" | number | string[] => {
+		const prerequisite = selectedSubject?.subject_info?.prerequisite;
 
-  const getSubjectPrerequisites = (): "Нема предуслов" | number | string[] => {
-    const prerequisite = selectedSubject?.subject_info?.prerequisite;
-  
-    if (!prerequisite) return "Нема предуслов";
-  
-    if ("subjects" in prerequisite && Array.isArray(prerequisite.subjects)) {
-      const names = prerequisite.subjects.map(
-        (item) =>
-          subjectData.find((subject) => subject.id === item)?.name || "/"
-      );
-      return names.length > 0 ? names : "Нема предуслов";
-    }
-  
-    if ("credits" in prerequisite && typeof prerequisite.credits === "number") {
-      return prerequisite.credits;
-    }
-  
-    return "Нема предуслов";
-  };
-  
+		if (!prerequisite) return "Нема предуслов";
 
-  return (
-    <div className="mx-auto p-4 bg-white min-h-screen">
-      <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">
-          <FilterSidebar
-            setSearchTerm={setSearchTerm}
-            setProfessorSearchTerm={setProfessorSearchTerm}
-            setAssistantSearchTerm={setAssistantSearchTerm}
-            setFilters={setFilters}
-            filters={filters}
-          />
-          <StaffSearch
-            randomStaff={randomStaff}
-            professorSearchTerm={professorSearchTerm}
-            assistantSearchTerm={assistantSearchTerm}
-            setProfessorSearchTerm={setProfessorSearchTerm}
-            setAssistantSearchTerm={setAssistantSearchTerm}
-          />
-        </div>
-        {/* Main content */}
-        <div className="flex-1">
-          {/* Search bar */}
-          <div className="mb-6 relative">
-            <input
-              type="text"
-              placeholder="Пребарувај предмети по име, код, опис"
-              value={searchTerm}
-              onChange={(e) => setSearchTerm(e.target.value)}
-              className="w-full p-3 pl-4 pr-12 border border-gray-300 rounded-lg 
+		if ("subjects" in prerequisite && Array.isArray(prerequisite.subjects)) {
+			const names = prerequisite.subjects.map(
+				(item) =>
+					subjectData.find((subject) => subject.id === item)?.name || "/"
+			);
+			return names.length > 0 ? names : "Нема предуслов";
+		}
+
+		if ("credits" in prerequisite && typeof prerequisite.credits === "number") {
+			return prerequisite.credits;
+		}
+
+		return "Нема предуслов";
+	};
+
+	return (
+		<div className="mx-auto p-4 bg-white min-h-screen">
+			<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">
+					<FilterSidebar
+						setSearchTerm={setSearchTerm}
+						setProfessorSearchTerm={setProfessorSearchTerm}
+						setAssistantSearchTerm={setAssistantSearchTerm}
+						setFilters={setFilters}
+						filters={filters}
+						tags={tags}
+					/>
+					<StaffSearch
+						randomStaff={randomStaff}
+						professorSearchTerm={professorSearchTerm}
+						assistantSearchTerm={assistantSearchTerm}
+						setProfessorSearchTerm={setProfessorSearchTerm}
+						setAssistantSearchTerm={setAssistantSearchTerm}
+					/>
+				</div>
+				{/* Main content */}
+				<div className="flex-1">
+					{/* Search bar */}
+					<div className="mb-6 relative">
+						<input
+							type="text"
+							placeholder="Пребарувај предмети по име, код, опис"
+							value={searchTerm}
+							onChange={(e) => setSearchTerm(e.target.value)}
+							className="w-full p-3 pl-4 pr-12 border border-gray-300 rounded-lg 
 							focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
-            />
-            {/* <button
-							className="absolute right-2 top-1/2 transform -translate-y-1/2
-						 bg-gray-800 text-white px-4 py-1 rounded-lg"
-						>
-							Избриши
-						</button> */}
-          </div>
+						/>
+					</div>
 
-          {/* Course grid */}
+					{/* Course grid */}
 
-          {!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={filteredSubjects}
-              visibleCourses={visibleCourses}
-              openSubjectDetails={openSubjectDetails}
-            />
-          )}
+					{!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={filteredSubjects}
+							visibleCourses={visibleCourses}
+							openSubjectDetails={openSubjectDetails}
+						/>
+					)}
 
-          {/* Load more button */}
-          {isLoaded && filteredSubjects.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-colors duration-200"
-              >
-                Погледни повеќе
-              </button>
-            </div>
-          )}
+					{/* Load more button */}
+					{isLoaded && filteredSubjects.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-colors duration-200"
+							>
+								Погледни повеќе
+							</button>
+						</div>
+					)}
 
-          {/* No results message */}
-          {isLoaded && filteredSubjects.length === 0 && (
-            <div className="text-center py-12">
-              <p className="text-gray-500 text-lg">
-                Не постојат такви предмети
-              </p>
-              <button
-                onClick={() =>
-                  resetFilters(
-                    setSearchTerm,
-                    setProfessorSearchTerm,
-                    setAssistantSearchTerm,
-                    setFilters
-                  )
-                }
-                className="mt-2 text-blue-600 hover:text-blue-800"
-              >
-                Ресетирај филтри
-              </button>
-            </div>
-          )}
-        </div>
-      </div>
-      {showModal && selectedSubject && (
-        <SubjectModal
-          selectedSubject={selectedSubject}
-          closeModal={closeModal}
-          subjectPrerequisites={getSubjectPrerequisites()}
-        />
-      )}
-    </div>
-  );
+					{/* No results message */}
+					{isLoaded && filteredSubjects.length === 0 && (
+						<div className="text-center py-12">
+							<p className="text-gray-500 text-lg">
+								Не постојат такви предмети
+							</p>
+							<button
+								onClick={() =>
+									resetFilters(
+										setSearchTerm,
+										setProfessorSearchTerm,
+										setAssistantSearchTerm,
+										setFilters
+									)
+								}
+								className="mt-2 text-blue-600 hover:text-blue-800"
+							>
+								Ресетирај филтри
+							</button>
+						</div>
+					)}
+				</div>
+			</div>
+			{showModal && selectedSubject && (
+				<SubjectModal
+					selectedSubject={selectedSubject}
+					closeModal={closeModal}
+					subjectPrerequisites={getSubjectPrerequisites()}
+				/>
+			)}
+		</div>
+	);
 };
 
Index: frontend/src/components/SubjectCatalog/SubjectList.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SubjectList.tsx	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/components/SubjectCatalog/SubjectList.tsx	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -2,51 +2,49 @@
 
 interface SubjectListProps {
-  filteredSubjects: Subject[];
-  visibleCourses: number;
-  openSubjectDetails: (subject: Subject) => void;
+	filteredSubjects: Subject[];
+	visibleCourses: number;
+	openSubjectDetails: (subject: Subject) => void;
 }
 
 const SubjectList = ({
-  filteredSubjects,
-  visibleCourses,
-  openSubjectDetails,
+	filteredSubjects,
+	visibleCourses,
+	openSubjectDetails,
 }: SubjectListProps) => {
-  return (
-    <div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
-      {filteredSubjects.slice(0, visibleCourses).map((subject) => (
-        <div
-          key={subject.id}
-          className="border border-gray-200 rounded-lg overflow-hidden shadow-sm 
+	return (
+		<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
+			{filteredSubjects.slice(0, visibleCourses).map((subject) => (
+				<div
+					key={subject.id}
+					className="border border-gray-200 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-2">
-              <div>
-                <h3 className="text-lg font-semibold">{subject.name}</h3>
-                <p className="text-gray-600">{subject.code}</p>
-              </div>
-            </div>
+				>
+					<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>
 
-            {/* <p className="text-gray-700 text-sm mb-4 line-clamp-2">
+						{/* <p className="text-gray-700 text-sm mb-4 line-clamp-2">
 							{subject.abstract}
 						</p> */}
 
-            <div className="flex flex-wrap gap-2 mb-4">
-              {/* these tags are for listing the domains a subject covers, ex. backend, AI ...*/}
-              {["Web Development", "Machine Learning", "Data Science"].map(
-                (tag) => (
-                  <span
-                    key={tag}
-                    className="bg-gray-100 text-gray-800 text-xs px-2 py-1 rounded"
-                  >
-                    {tag}
-                  </span>
-                )
-              )}
-            </div>
+						<div className="flex flex-wrap gap-2 mb-4">
+							{/* these tags are for listing the domains a subject covers, ex. backend, AI ...*/}
+							{subject.subject_info.tags.map((tag) => (
+								<span
+									key={tag}
+									className="bg-gray-100 text-gray-800 text-xs px-2 py-1 rounded"
+								>
+									{tag}
+								</span>
+							))}
+						</div>
 
-            <div className="flex justify-end mt-auto">
-              {/* these tags could be used as certain flags for some subjects, like most picked subject, best match etc. */}
-              {/* <div className="flex gap-3">
+						<div className="flex justify-end mt-auto">
+							{/* these tags could be used as certain flags for some subjects, like most picked subject, best match etc. */}
+							{/* <div className="flex gap-3">
 								<div className="bg-red-500 px-1 py-1 rounded-full text-sm font-medium">
 									TAG1
@@ -56,17 +54,17 @@
 								</div>
 							</div> */}
-              <button
-                onClick={() => openSubjectDetails(subject)}
-                className="flex items-center text-sm text-gray-700 hover:text-gray-900"
-              >
-                <img src="src/assets/eye.svg" className="w-4 h-4 mr-1" />
-                Погледни детали
-              </button>
-            </div>
-          </div>
-        </div>
-      ))}
-    </div>
-  );
+							<button
+								onClick={() => openSubjectDetails(subject)}
+								className="flex items-center text-sm text-gray-700 hover:text-gray-900"
+							>
+								<img src="src/assets/eye.svg" className="w-4 h-4 mr-1" />
+								Погледни детали
+							</button>
+						</div>
+					</div>
+				</div>
+			))}
+		</div>
+	);
 };
 
Index: frontend/src/components/SubjectCatalog/utils.ts
===================================================================
--- frontend/src/components/SubjectCatalog/utils.ts	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/components/SubjectCatalog/utils.ts	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -2,137 +2,144 @@
 
 interface filteredSubjectsParams {
-  subjectData: Subject[];
-  searchTerm: string;
-  professorSearchTerm: string;
-  assistantSearchTerm: string;
-  filters: {
-    season: "W" | "S" | "";
-    semester: number[];
-    level: number[];
-    activated: "activated" | "not_activated" | "";
-    mandatoryFor: Programs[];
-    electiveFor: Programs[];
-    professors: string[];
-    assistants: string[];
-    hasPrerequisites: boolean;
-  };
+	subjectData: Subject[];
+	searchTerm: string;
+	professorSearchTerm: string;
+	assistantSearchTerm: string;
+	filters: {
+		season: "W" | "S" | "";
+		semester: number[];
+		level: number[];
+		activated: "activated" | "not_activated" | "";
+		mandatoryFor: Programs[];
+		electiveFor: Programs[];
+		professors: string[];
+		assistants: string[];
+		hasPrerequisites: boolean;
+		tags: string[];
+	};
 }
 
 export const filterSubjects = ({
-  subjectData,
-  searchTerm,
-  professorSearchTerm,
-  assistantSearchTerm,
-  filters,
+	subjectData,
+	searchTerm,
+	professorSearchTerm,
+	assistantSearchTerm,
+	filters,
 }: filteredSubjectsParams) =>
-  subjectData.filter((subject) => {
-    const searchMatches =
-      subject.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
-      subject.code.toLowerCase().includes(searchTerm.toLowerCase()) ||
-      subject.abstract?.toLowerCase().includes(searchTerm.toLowerCase());
+	subjectData.filter((subject) => {
+		const searchMatches =
+			subject.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
+			subject.code.toLowerCase().includes(searchTerm.toLowerCase()) ||
+			subject.abstract?.toLowerCase().includes(searchTerm.toLowerCase());
 
-    const seasonMatches =
-      filters.season === "" || filters.season === subject.subject_info.season;
+		const seasonMatches =
+			filters.season === "" || filters.season === subject.subject_info.season;
 
-    const semesterMatches =
-      filters.semester.length === 0 ||
-      filters.semester.includes(subject.subject_info.semester);
+		const semesterMatches =
+			filters.semester.length === 0 ||
+			filters.semester.includes(subject.subject_info.semester);
 
-    const levelMatches =
-      filters.level.length === 0 || filters.level.includes(subject.subject_info.level);
+		const levelMatches =
+			filters.level.length === 0 ||
+			filters.level.includes(subject.subject_info.level);
 
-    const activatedMatches =
-      filters.activated == "" ||
-      (filters.activated == "activated" && subject.subject_info.activated) ||
-      (filters.activated == "not_activated" && !subject.subject_info.activated);
+		const activatedMatches =
+			filters.activated == "" ||
+			(filters.activated == "activated" && subject.subject_info.activated) ||
+			(filters.activated == "not_activated" && !subject.subject_info.activated);
 
-    const mandatoryMatches =
-      filters.mandatoryFor.length === 0 ||
-      subject.subject_info.mandatory_for.some((item) =>
-        filters.mandatoryFor.includes(item)
-      );
+		const mandatoryMatches =
+			filters.mandatoryFor.length === 0 ||
+			subject.subject_info.mandatory_for.some((item) =>
+				filters.mandatoryFor.includes(item)
+			);
 
-    const electiveMatches =
-      filters.electiveFor.length === 0 ||
-      subject.subject_info.elective_for.some((item) =>
-        filters.electiveFor.includes(item)
-      );
+		const electiveMatches =
+			filters.electiveFor.length === 0 ||
+			subject.subject_info.elective_for.some((item) =>
+				filters.electiveFor.includes(item)
+			);
 
-    const professorsMatches =
-      professorSearchTerm == "" ||
-      subject.subject_info.professors.some((item) =>
-        item.toLowerCase().includes(professorSearchTerm.toLowerCase())
-      );
+		const professorsMatches =
+			professorSearchTerm == "" ||
+			subject.subject_info.professors.some((item) =>
+				item.toLowerCase().includes(professorSearchTerm.toLowerCase())
+			);
 
-    const assistantsMatches =
-      assistantSearchTerm == "" ||
-      subject.subject_info.assistants.some((item) =>
-        item.toLowerCase().includes(assistantSearchTerm.toLowerCase())
-      );
+		const assistantsMatches =
+			assistantSearchTerm == "" ||
+			subject.subject_info.assistants.some((item) =>
+				item.toLowerCase().includes(assistantSearchTerm.toLowerCase())
+			);
 
-    const prerequisitesMatch =
-      !filters.hasPrerequisites || subject.subject_info.prerequisite == null;
+		const prerequisitesMatch =
+			!filters.hasPrerequisites || subject.subject_info.prerequisite == null;
 
-    return (
-      searchMatches &&
-      seasonMatches &&
-      semesterMatches &&
-      levelMatches &&
-      activatedMatches &&
-      mandatoryMatches &&
-      electiveMatches &&
-      professorsMatches &&
-      assistantsMatches &&
-      prerequisitesMatch
-    );
-  });
+		const tagsMatch =
+			filters.tags.length == 0 ||
+			subject.subject_info.tags.some((item) => filters.tags.includes(item));
+		return (
+			searchMatches &&
+			seasonMatches &&
+			semesterMatches &&
+			levelMatches &&
+			activatedMatches &&
+			mandatoryMatches &&
+			electiveMatches &&
+			professorsMatches &&
+			assistantsMatches &&
+			prerequisitesMatch &&
+			tagsMatch
+		);
+	});
 
 export const resetFilters = (
-  setSearchTerm: (val: string) => void,
-  setProfessorSearchTerm: (val: string) => void,
-  setAssistantSearchTerm: (val: string) => void,
-  setFilters: (val: (prev: Filters) => Filters) => void
+	setSearchTerm: (val: string) => void,
+	setProfessorSearchTerm: (val: string) => void,
+	setAssistantSearchTerm: (val: string) => void,
+	setFilters: (val: (prev: Filters) => Filters) => void
 ) => {
-  setSearchTerm("");
-  setProfessorSearchTerm("");
-  setAssistantSearchTerm("");
-  setFilters(() => ({
-    season: "",
-    semester: [],
-    level: [],
-    activated: "",
-    mandatoryFor: [],
-    electiveFor: [],
-    professors: [],
-    assistants: [],
-    hasPrerequisites: false,
-  }));
+	setSearchTerm("");
+	setProfessorSearchTerm("");
+	setAssistantSearchTerm("");
+	setFilters(() => ({
+		season: "",
+		semester: [],
+		level: [],
+		activated: "",
+		mandatoryFor: [],
+		electiveFor: [],
+		professors: [],
+		assistants: [],
+		hasPrerequisites: false,
+		tags: [],
+	}));
 };
 
 export const getRandomStaff = (
-  subjectData: Subject[],
-  setRandomStaff: ([]: string[]) => void
+	subjectData: Subject[],
+	setRandomStaff: ([]: string[]) => void
 ) => {
-  if (subjectData.length == 0) return;
-  const getRandomProfessor = () => {
-    const randomSubject1 =
-      subjectData[Math.floor(Math.random() * subjectData.length)];
-    return randomSubject1?.subject_info.professors[
-      Math.floor(Math.random() * randomSubject1.subject_info.professors.length)
-    ];
-  };
-  const getRandomAssistant = () => {
-    const randomSubject2 =
-      subjectData[Math.floor(Math.random() * subjectData.length)];
-    return randomSubject2?.subject_info.assistants[
-      Math.floor(Math.random() * randomSubject2.subject_info.assistants.length)
-    ];
-  };
-  let randomProfessor = "";
-  let randomAssistant = "";
+	if (subjectData.length == 0) return;
+	const getRandomProfessor = () => {
+		const randomSubject1 =
+			subjectData[Math.floor(Math.random() * subjectData.length)];
+		return randomSubject1?.subject_info.professors[
+			Math.floor(Math.random() * randomSubject1.subject_info.professors.length)
+		];
+	};
+	const getRandomAssistant = () => {
+		const randomSubject2 =
+			subjectData[Math.floor(Math.random() * subjectData.length)];
+		return randomSubject2?.subject_info.assistants[
+			Math.floor(Math.random() * randomSubject2.subject_info.assistants.length)
+		];
+	};
+	let randomProfessor = "";
+	let randomAssistant = "";
 
-  while (!randomProfessor) randomProfessor = getRandomProfessor();
-  while (!randomAssistant) randomAssistant = getRandomAssistant();
+	while (!randomProfessor) randomProfessor = getRandomProfessor();
+	while (!randomAssistant) randomAssistant = getRandomAssistant();
 
-  setRandomStaff([randomProfessor, randomAssistant]);
+	setRandomStaff([randomProfessor, randomAssistant]);
 };
Index: frontend/src/components/types.ts
===================================================================
--- frontend/src/components/types.ts	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/components/types.ts	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -15,12 +15,15 @@
 	current_year: number;
 	passed_subjects: Subject[];
-  	study_effort: string,
-  	preferred_domains: string[],
-  	preferred_technologies: string[],
-  	preferred_evaluation: string[],
-  	favorite_professors: string[]
+	study_effort: number;
+	preferred_domains: string[];
+	preferred_technologies: string[];
+	preferred_evaluation: string[];
+	favorite_professors: string[];
 }
 
-type Prerequisite = { subjects: number[] } | { credits: number } | { none: true };
+type Prerequisite =
+	| { subjects: number[] }
+	| { credits: number }
+	| { none: true };
 
 export interface SubjectInfo {
@@ -37,4 +40,8 @@
 	professors: string[];
 	assistants: string[];
+	tags: string[];
+	technologies: string[];
+	evaluation: string[];
+	is_easy: boolean;
 }
 
@@ -49,4 +56,5 @@
 	assistants: string[];
 	hasPrerequisites: boolean;
+	tags: string[];
 };
 
Index: frontend/src/constants/subjects.ts
===================================================================
--- frontend/src/constants/subjects.ts	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/constants/subjects.ts	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -7,2 +7,13 @@
 	"KN23",
 ] as const;
+
+export const STUDY_EFFORT = [1, 2, 3, 4, 5] as const;
+export const YEARS = [1, 2, 3, 4] as const;
+export const EVALUATIONS = ["Теорија", "Практично", "Код", "Проект"];
+
+export const EVALUATIONS_MAP = {
+	Теорија: "Theory",
+	Практично: "Practical",
+	Код: "Code",
+	Проект: "Project",
+};
Index: frontend/src/pages/Account.tsx
===================================================================
--- frontend/src/pages/Account.tsx	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/pages/Account.tsx	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -1,76 +1,55 @@
 import { useEffect, useState } from "react";
+import { useNavigate } from "react-router-dom";
+import axiosInstance from "../api/axiosInstance";
+import StudentForm from "../components/StudentForm";
+import { StudentData } from "../components/types";
 import { useAuth } from "../hooks/useAuth";
-import StudentForm from "../components/StudentForm";
-import { Subject } from "../components/types";
-import { StudentData } from "../components/types";
-import axiosInstance from "../api/axiosInstance";
-import { useNavigate } from "react-router-dom";
 
 const Account = () => {
-  const navigate = useNavigate();
-  const { accessToken, refreshAccessToken } = useAuth();
-  const [tokenChecked, setTokenChecked] = useState(false);
-  const [formData, setFormData] = useState<StudentData | null>(null);
-  const [subjects, setSubjects] = useState<Subject[]>([]);
-  const [professors, setProfessors] = useState<string[]>([]);
+	const navigate = useNavigate();
+	const { accessToken, refreshAccessToken } = useAuth();
+	const [tokenChecked, setTokenChecked] = useState(false);
+	const [formData, setFormData] = useState<StudentData | null>(null);
 
-  useEffect(() => {
-    const checkToken = async () => {
-      let accessToken = localStorage.getItem("access_token");
-  
-      if (!accessToken) {
-        accessToken = await refreshAccessToken();
-        if (accessToken) {
-          localStorage.setItem("access_token", accessToken);
-        } else {
-          navigate("/login");
-          return;
-        }
-      }
-      setTokenChecked(true); 
-    };
-    checkToken();
-  }, [refreshAccessToken, navigate]);
+	useEffect(() => {
+		const checkToken = async () => {
+			let accessToken = localStorage.getItem("access_token");
 
-  useEffect(() => {
-    const fetchData = async () => {
-      if (!accessToken) {
-        return;
-      }
-      try {
-        const resForm = await axiosInstance.get("/auth/form/");
-        setFormData(resForm.data);
-        const resSubjects = await fetch("http://localhost:8000/subjects");
-        if (resSubjects.ok) {
-          const subJson: Subject[] = await resSubjects.json();
-          setSubjects(subJson || []);
-          const allProfessors: string[] = subJson
-            .flatMap((subject: Subject) => subject.subject_info.professors)
-            .filter((p): p is string => typeof p === "string");
+			if (!accessToken) {
+				accessToken = await refreshAccessToken();
+				if (accessToken) {
+					localStorage.setItem("access_token", accessToken);
+				} else {
+					navigate("/login");
+					return;
+				}
+			}
+			setTokenChecked(true);
+		};
+		checkToken();
+	}, [refreshAccessToken, navigate]);
 
-          const uniqueProfessors = Array.from(new Set(allProfessors));
-          const filteredProfessors = uniqueProfessors.filter(
-            (prof) => prof.trim().toLowerCase() !== "сите професори"
-          );
-          setProfessors(filteredProfessors);
-        }
-      } catch (error) {
-        console.error("Error fetching data.", error);
-      }
-    };
-    if (tokenChecked) {
-      fetchData();
-    }
-  }, [tokenChecked, accessToken]);
+	useEffect(() => {
+		const fetchData = async () => {
+			if (!accessToken) {
+				return;
+			}
+			try {
+				const resForm = await axiosInstance.get("/auth/form/");
+				setFormData(resForm.data);
+			} catch (error) {
+				console.error("Error fetching data.", error);
+			}
+		};
+		if (tokenChecked) {
+			fetchData();
+		}
+	}, [tokenChecked, accessToken]);
 
-  return (
-    <div className="p-4">
-      <StudentForm
-        formData={formData}
-        subjects={subjects}
-        professors={professors}
-      />
-    </div>
-  );
+	return (
+		<div className="p-4">
+			<StudentForm formData={formData} />
+		</div>
+	);
 };
 
Index: frontend/src/pages/Login.tsx
===================================================================
--- frontend/src/pages/Login.tsx	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/pages/Login.tsx	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -6,98 +6,98 @@
 
 interface LoginForm {
-  email: string;
-  password: string;
+	email: string;
+	password: string;
 }
 
 const Login: React.FC = () => {
-  const [formData, setFormData] = useState<LoginForm>({
-    email: "",
-    password: "",
-  });
-  const [errors, setErrors] = useState<
-    Partial<LoginForm> & { detail?: string[] }
-  >({});
-  const navigate = useNavigate();
-  const { login } = useAuth();
+	const [formData, setFormData] = useState<LoginForm>({
+		email: "",
+		password: "",
+	});
+	const [errors, setErrors] = useState<
+		Partial<LoginForm> & { detail?: string[] }
+	>({});
+	const navigate = useNavigate();
+	const { login } = useAuth();
 
-  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
-    setFormData({
-      ...formData,
-      [e.target.name]: e.target.value,
-    });
-  };
+	const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
+		setFormData({
+			...formData,
+			[e.target.name]: e.target.value,
+		});
+	};
 
-  const handleLogin = async (e: React.FormEvent) => {
-    e.preventDefault();
-    setErrors({});
+	const handleLogin = async (e: React.FormEvent) => {
+		e.preventDefault();
+		setErrors({});
 
-    try {
-      const response = await axios.post<{ token: string }>(
-        "http://localhost:8000/auth/login/",
-        {
-          email: formData.email,
-          password: formData.password,
-        }
-      );
-      const { access, refresh } = response.data;
-      login(access, refresh);
-      navigate("/");
-    } catch (err: unknown) {
-      const axiosError = err as AxiosError<{
-        [key: string]: string[] | string;
-      }>;
-      console.log("Error response data:", axiosError.response?.data);
+		try {
+			const response = await axios.post<{
+				access: string;
+				refresh: string;
+			}>("http://localhost:8000/auth/login/", {
+				email: formData.email,
+				password: formData.password,
+			});
+			const { access, refresh } = response.data;
+			login(access, refresh);
+			navigate("/");
+		} catch (err: unknown) {
+			const axiosError = err as AxiosError<{
+				[key: string]: string[] | string;
+			}>;
+			console.log("Error response data:", axiosError.response?.data);
 
-      if (axiosError.response && axiosError.response.data) {
-        const errorData = axiosError.response.data;
-        const normalizedErrors: { [key: string]: string[] } = {};
-        Object.entries(errorData).forEach(([field, message]) => {
-          normalizedErrors[field] = Array.isArray(message)
-            ? message
-            : [message];
-        });
-        setErrors(normalizedErrors);
-      } else {
-        setErrors({ detail: ["An unknown error occurred."] });
-      }
-    }
-  };
-  return (
-    <div className="flex flex-col items-center justify-center h-screen bg-gray-50">
-      <form
-        onSubmit={handleLogin}
-        className="bg-white p-6 rounded-lg shadow-md w-80"
-      >
-        <h2 className="text-xl font-semibold mb-4 text-center">Login</h2>
-        {errors.detail && (
-          <div className="text-red-500 mb-3 text-sm">{errors.detail[0]}.</div>
-        )}
-        <input
-          type="email"
-          name="email"
-          required
-          value={formData.email}
-          onChange={handleChange}
-          placeholder="Email"
-          className="w-full mb-3 p-2 border rounded"
-        />
-        {errors.email && (
-          <p className="text-red-500 text-sm mb-2">{errors.email[0]}</p>
-        )}
-        <PasswordInput
-          name="password"
-          value={formData.password}
-          onChange={handleChange}
-          error={errors.password ? errors.password[0] : undefined}
-        />
-        <button
-          type="submit"
-          className="w-full bg-blue-500 text-white p-2 rounded hover:bg-blue-600"
-        >
-          Login
-        </button>
-      </form>
-    </div>
-  );
+			if (axiosError.response && axiosError.response.data) {
+				const errorData = axiosError.response.data;
+				const normalizedErrors: { [key: string]: string[] } = {};
+				Object.entries(errorData).forEach(([field, message]) => {
+					normalizedErrors[field] = Array.isArray(message)
+						? message
+						: [message];
+				});
+				setErrors(normalizedErrors);
+			} else {
+				setErrors({ detail: ["An unknown error occurred."] });
+			}
+		}
+	};
+	return (
+		<div className="flex flex-col items-center justify-center h-screen bg-gray-50">
+			<form
+				onSubmit={handleLogin}
+				className="bg-white p-6 rounded-lg shadow-md w-80"
+			>
+				<h2 className="text-xl font-semibold mb-4 text-center">Login</h2>
+				{errors.detail && (
+					<div className="text-red-500 mb-3 text-sm">{errors.detail[0]}.</div>
+				)}
+				<input
+					type="email"
+					name="email"
+					required
+					value={formData.email}
+					onChange={handleChange}
+					placeholder="Email"
+					className="w-full mb-3 p-2 border rounded"
+				/>
+				{errors.email && (
+					<p className="text-red-500 text-sm mb-2">{errors.email[0]}</p>
+				)}
+				<PasswordInput
+					name="password"
+					value={formData.password}
+					onChange={handleChange}
+					error={errors.password ? errors.password[0] : undefined}
+				/>
+				<button
+					type="submit"
+					className="w-full bg-blue-500 text-white p-2 rounded hover:bg-blue-600"
+				>
+					Login
+				</button>
+			</form>
+		</div>
+	);
 };
 
Index: frontend/src/pages/Register.tsx
===================================================================
--- frontend/src/pages/Register.tsx	(revision 36797f6a171f176d1b9fe7e9eb66f8a01c69af6f)
+++ frontend/src/pages/Register.tsx	(revision adb1885b31d1369ca9e759cd6011049b7e898e51)
@@ -1,4 +1,4 @@
+import axios, { AxiosError } from "axios";
 import React, { useState } from "react";
-import axios, { AxiosError } from "axios";
 import { useNavigate } from "react-router-dom";
 import PasswordInput from "../components/PasswordInput";
@@ -6,139 +6,139 @@
 
 interface RegisterForm {
-  email: string;
-  password: string;
-  confirmPassword: string;
-  fullName: string;
+	email: string;
+	password: string;
+	confirmPassword: string;
+	fullName: string;
 }
 
 const Register: React.FC = () => {
-  const [formData, setFormData] = useState<RegisterForm>({
-    email: "",
-    password: "",
-    confirmPassword: "",
-    fullName: "",
-  });
-  const [loading, setLoading] = useState(false);
-  const [errors, setErrors] = useState<
-    Partial<Record<keyof RegisterForm, string[]>> & {
-      non_field_errors?: string[];
-    }
-  >({});
-  const navigate = useNavigate();
-  const { login } = useAuth();
+	const [formData, setFormData] = useState<RegisterForm>({
+		email: "",
+		password: "",
+		confirmPassword: "",
+		fullName: "",
+	});
+	const [loading, setLoading] = useState(false);
+	const [errors, setErrors] = useState<
+		Partial<Record<keyof RegisterForm, string[]>> & {
+			non_field_errors?: string[];
+		}
+	>({});
+	const navigate = useNavigate();
+	const { login } = useAuth();
 
-  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
-    setFormData({
-      ...formData,
-      [e.target.name]: e.target.value,
-    });
-  };
+	const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
+		setFormData({
+			...formData,
+			[e.target.name]: e.target.value,
+		});
+	};
 
-  const handleRegister = async (e: React.FormEvent) => {
-    e.preventDefault();
-    setErrors({});
-    if (formData.password !== formData.confirmPassword) {
-      setErrors({ confirmPassword: ["Password do not match. "] });
-      return;
-    }
-    setLoading(true);
+	const handleRegister = async (e: React.FormEvent) => {
+		e.preventDefault();
+		setErrors({});
+		if (formData.password !== formData.confirmPassword) {
+			setErrors({ confirmPassword: ["Password do not match. "] });
+			return;
+		}
+		setLoading(true);
 
-    try {
-      console.log(formData);
-      const response = await axios.post(
-        "http://localhost:8000/auth/register/",
-        {
-          email: formData.email,
-          password: formData.password,
-          confirm_password: formData.confirmPassword,
-          full_name: formData.fullName,
-        }
-      );
-      console.log(response);
-      const { access, refresh } = response.data;
-      console.log(access, refresh);
-      login(access, refresh);
-      navigate("/");
-    } catch (err: unknown) {
-      const axiosError = err as AxiosError<{
-        [key: string]: string[] | string;
-      }>;
-      if (axiosError.response && axiosError.response.data) {
-        const errorData = axiosError.response.data;
-        const normalizedErrors: { [key: string]: string[] } = {};
-        Object.entries(errorData).forEach(([field, message]) => {
-          normalizedErrors[field] = Array.isArray(message)
-            ? message
-            : [message];
-        });
-        setErrors(normalizedErrors);
-      } else {
-        setErrors({ non_field_errors: ["An unexpected error occurred."] });
-      }
-    } finally {
-      setLoading(false);
-    }
-  };
-  return (
-    <div className="flex flex-col items-center justify-center min-h-screen bg-gray-50">
-      <form
-        onSubmit={handleRegister}
-        className="bg-white p-6 rounded-lg h-auto shadow-md w-80"
-      >
-        <h2 className="text-xl font-semibold mb-4 text-center">Register</h2>
-        {errors.non_field_errors && (
-          <div className="text-red-500 mb-3 text-sm">
-            {errors.non_field_errors[0]}
-          </div>
-        )}
-        <input
-          type="email"
-          name="email"
-          required
-          value={formData.email}
-          onChange={handleChange}
-          placeholder="Email"
-          className="w-full mb-3 p-2 border rounded"
-        />
-        {errors.email && (
-          <p className="text-red-500 text-sm mb-2">{errors.email[0]}</p>
-        )}
-        <PasswordInput
-          name="password"
-          value={formData.password}
-          onChange={handleChange}
-          error={errors.password ? errors.password[0] : undefined}
-        />
-        <PasswordInput
-          name="confirmPassword"
-          value={formData.confirmPassword}
-          onChange={handleChange}
-        />
-        {errors.confirmPassword && (
-          <p className="text-red-500 text-sm mb-2">
-            {errors.confirmPassword[0]}
-          </p>
-        )}
-        <input
-          type="text"
-          name="fullName"
-          required
-          value={formData.fullName}
-          onChange={handleChange}
-          placeholder="Име презиме"
-          className="w-full mb-3 p-2 border rounded"
-        />
-        <button
-          type="submit"
-          disabled={loading}
-          className={`w-full bg-blue-600 text-white py-2 rounded hover:bg-blue-700 transition ${
-            loading ? "opacity-50 cursor-not-allowed" : ""
-          }`}
-        >
-          {loading ? "Registering..." : "Register"}
-        </button>
-      </form>
-    </div>
-  );
+		try {
+			console.log(formData);
+			const response = await axios.post<{
+				access: string;
+				refresh: string;
+			}>("http://localhost:8000/auth/register/", {
+				email: formData.email,
+				password: formData.password,
+				confirm_password: formData.confirmPassword,
+				full_name: formData.fullName,
+			});
+			console.log(response);
+			const { access, refresh } = response.data;
+			console.log(access, refresh);
+			login(access, refresh);
+			navigate("/");
+		} catch (err: unknown) {
+			const axiosError = err as AxiosError<{
+				[key: string]: string[] | string;
+			}>;
+			if (axiosError.response && axiosError.response.data) {
+				const errorData = axiosError.response.data;
+				const normalizedErrors: { [key: string]: string[] } = {};
+				Object.entries(errorData).forEach(([field, message]) => {
+					normalizedErrors[field] = Array.isArray(message)
+						? message
+						: [message];
+				});
+				setErrors(normalizedErrors);
+			} else {
+				setErrors({ non_field_errors: ["An unexpected error occurred."] });
+			}
+		} finally {
+			setLoading(false);
+		}
+	};
+	return (
+		<div className="flex flex-col items-center justify-center min-h-screen bg-gray-50">
+			<form
+				onSubmit={handleRegister}
+				className="bg-white p-6 rounded-lg h-auto shadow-md w-80"
+			>
+				<h2 className="text-xl font-semibold mb-4 text-center">Register</h2>
+				{errors.non_field_errors && (
+					<div className="text-red-500 mb-3 text-sm">
+						{errors.non_field_errors[0]}
+					</div>
+				)}
+				<input
+					type="email"
+					name="email"
+					required
+					value={formData.email}
+					onChange={handleChange}
+					placeholder="Email"
+					className="w-full mb-3 p-2 border rounded"
+				/>
+				{errors.email && (
+					<p className="text-red-500 text-sm mb-2">{errors.email[0]}</p>
+				)}
+				<PasswordInput
+					name="password"
+					value={formData.password}
+					onChange={handleChange}
+					error={errors.password ? errors.password[0] : undefined}
+				/>
+				<PasswordInput
+					name="confirmPassword"
+					value={formData.confirmPassword}
+					onChange={handleChange}
+				/>
+				{errors.confirmPassword && (
+					<p className="text-red-500 text-sm mb-2">
+						{errors.confirmPassword[0]}
+					</p>
+				)}
+				<input
+					type="text"
+					name="fullName"
+					required
+					value={formData.fullName}
+					onChange={handleChange}
+					placeholder="Име презиме"
+					className="w-full mb-3 p-2 border rounded"
+				/>
+				<button
+					type="submit"
+					disabled={loading}
+					className={`w-full bg-blue-600 text-white py-2 rounded hover:bg-blue-700 transition ${
+						loading ? "opacity-50 cursor-not-allowed" : ""
+					}`}
+				>
+					{loading ? "Registering..." : "Register"}
+				</button>
+			</form>
+		</div>
+	);
 };
 export default Register;
