Index: frontend/src/components/SubjectCatalog.tsx
===================================================================
--- frontend/src/components/SubjectCatalog.tsx	(revision d8ea9015e664f1456aeb1d80eaf551feace62c4e)
+++ frontend/src/components/SubjectCatalog.tsx	(revision fb5bb5745cd57c09a4efe1830dddf087fbcc331f)
@@ -32,4 +32,11 @@
 		);
 	};
+
+	const filteredSubjects = subjectData.filter(
+		(subject) =>
+			subject.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
+			subject.code.toLowerCase().includes(searchTerm.toLowerCase()) ||
+			subject.abstract?.toLowerCase().includes(searchTerm.toLowerCase())
+	);
 
 	useEffect(() => {
@@ -105,5 +112,5 @@
 						<input
 							type="text"
-							placeholder="TODO: make this work :)"
+							placeholder="Пребарувај предмети по име, код, опис..."
 							value={searchTerm}
 							onChange={(e) => setSearchTerm(e.target.value)}
@@ -125,5 +132,5 @@
 					) : (
 						<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
-							{subjectData.slice(0, visibleCourses).map((subject) => (
+							{filteredSubjects.slice(0, visibleCourses).map((subject) => (
 								<div
 									key={subject.id}
@@ -214,5 +221,5 @@
 
 					{/* Load more button */}
-					{isLoaded && subjectData.length > visibleCourses && (
+					{isLoaded && filteredSubjects.length > visibleCourses && (
 						<div className="mt-5 text-center">
 							<button
@@ -226,5 +233,5 @@
 
 					{/* No results message */}
-					{isLoaded && subjectData.length === 0 && (
+					{isLoaded && filteredSubjects.length === 0 && (
 						<div className="text-center py-12">
 							<p className="text-gray-500 text-lg">
