Index: ontend/README.md
===================================================================
--- frontend/README.md	(revision 4959205261f057ccc4d069fc6e3961d154192be2)
+++ 	(revision )
@@ -1,54 +1,0 @@
-# React + TypeScript + Vite
-
-This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
-
-Currently, two official plugins are available:
-
-- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
-- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
-
-## Expanding the ESLint configuration
-
-If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
-
-```js
-export default tseslint.config({
-  extends: [
-    // Remove ...tseslint.configs.recommended and replace with this
-    ...tseslint.configs.recommendedTypeChecked,
-    // Alternatively, use this for stricter rules
-    ...tseslint.configs.strictTypeChecked,
-    // Optionally, add this for stylistic rules
-    ...tseslint.configs.stylisticTypeChecked,
-  ],
-  languageOptions: {
-    // other options...
-    parserOptions: {
-      project: ['./tsconfig.node.json', './tsconfig.app.json'],
-      tsconfigRootDir: import.meta.dirname,
-    },
-  },
-})
-```
-
-You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
-
-```js
-// eslint.config.js
-import reactX from 'eslint-plugin-react-x'
-import reactDom from 'eslint-plugin-react-dom'
-
-export default tseslint.config({
-  plugins: {
-    // Add the react-x and react-dom plugins
-    'react-x': reactX,
-    'react-dom': reactDom,
-  },
-  rules: {
-    // other rules...
-    // Enable its recommended typescript rules
-    ...reactX.configs['recommended-typescript'].rules,
-    ...reactDom.configs.recommended.rules,
-  },
-})
-```
Index: frontend/index.html
===================================================================
--- frontend/index.html	(revision 4959205261f057ccc4d069fc6e3961d154192be2)
+++ frontend/index.html	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
@@ -3,5 +3,5 @@
 	<head>
 		<meta charset="UTF-8" />
-		<link rel="icon" type="image/svg+xml" href="/vite.svg" />
+		<!--<link rel="icon" type="image/svg+xml" href="/vite.svg" /> -->
 		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
 		<title>IzberiIzboren</title>
Index: frontend/src/App.tsx
===================================================================
--- frontend/src/App.tsx	(revision 4959205261f057ccc4d069fc6e3961d154192be2)
+++ frontend/src/App.tsx	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
@@ -1,5 +1,6 @@
 import { createBrowserRouter, RouterProvider } from "react-router-dom";
-import Home from "./Home";
+import CourseCatalog from "./components/SubjectCatalog";
 import "./index.css";
+import Home from "./pages/Home";
 
 const router = createBrowserRouter([
@@ -7,4 +8,8 @@
 		path: "/",
 		element: <Home />,
+	},
+	{
+		path: "/test",
+		element: <CourseCatalog />,
 	},
 ]);
Index: ontend/src/Home.tsx
===================================================================
--- frontend/src/Home.tsx	(revision 4959205261f057ccc4d069fc6e3961d154192be2)
+++ 	(revision )
@@ -1,128 +1,0 @@
-import { useEffect, useState } from "react";
-
-type ValidHeader = Extract<keyof Subject, "name" | "code">;
-const subject_values: ValidHeader[] = ["name", "code"];
-// const subject_values: (keyof Subject)[] = ["name", "code"];
-
-interface Subject {
-	id: number;
-	code: string;
-	name: string;
-	abstract: string;
-	info: SubjectInfo;
-}
-
-interface SubjectInfo {
-	level: number;
-	short: string;
-	prerequisite: string;
-	activated: boolean;
-	participants: number[];
-	mandatory: boolean;
-	mandatory_for: string[];
-	semester: number;
-	season: string;
-	elective_for: string[];
-	professors: string[];
-	assistants: string[];
-}
-
-function Home() {
-	const [data, setData] = useState<Subject[]>([]);
-	const [extraData, setExtraData] = useState<SubjectInfo[]>([]);
-	const [showData, setShowData] = useState<boolean[]>([]);
-	const [isLoaded, setIsLoaded] = useState(false);
-	const [limit, setLimit] = useState(10);
-
-	const toggleInfo = (index: number) => {
-		console.log(extraData[index]);
-		console.log(extraData);
-		setShowData((prev) =>
-			prev.map((value, i) => (i === index ? !value : value))
-		);
-		console.log(showData);
-	};
-
-	const renderData = (data: SubjectInfo) => {
-		return Object.keys(data)
-			.slice(1)
-			.map((key) => {
-				const typedKey = key as keyof SubjectInfo;
-				const field = data[typedKey];
-				return Array.isArray(field) ? (
-					<p>
-						{key}: {field.length === 0 ? "/" : field.join(", ")}
-					</p>
-				) : (
-					<p>
-						{key}: {field === "" ? "/" : field.toString()}
-					</p>
-				);
-			});
-	};
-
-	useEffect(() => {
-		const fetchData = async () => {
-			const response = await fetch("http://localhost:8000/api");
-			const data = await response.json();
-			setData(data.rows);
-			const object_data: SubjectInfo[] = data.rows.map((item: Subject) => {
-				return item.info;
-			});
-			console.log(object_data);
-			setExtraData(object_data);
-			setShowData(Array(object_data.length).fill(false));
-			setIsLoaded(true);
-		};
-		fetchData();
-	}, []);
-	return !isLoaded ? (
-		<p>Loading...</p>
-	) : (
-		<div className="ml-2 flex-col">
-			{data.slice(0, limit).map((item: Subject, index: number) => {
-				return (
-					<div
-						key={item.code}
-						className="p-5 rounded-md border flex gap-12
-						border-black mt-1 bg-blue-200"
-					>
-						<div className="w-80">
-							<p>Subject:</p>
-							{subject_values.map((header) => {
-								return (
-									<p key={header}>
-										{header}: {item[header]}
-									</p>
-								);
-							})}
-							<button
-								onClick={() => toggleInfo(index)}
-								className="rounded-md p-1.5 mt-1 bg-blue-500 text-sm text-white"
-							>
-								{showData[index] ? "hide " : "show "} info
-							</button>
-						</div>
-						{showData[index] && (
-							<div>
-								<p>Subject info:</p>
-								{renderData(extraData[index])}
-							</div>
-						)}
-					</div>
-				);
-			})}
-			<button
-				className="rounded-md border p-3 my-3 bg-blue-500 text-white"
-				onClick={() => setLimit(limit + 10)}
-			>
-				Load more
-			</button>
-			<button className="rounded-md border p-3 my-3 ml-3 bg-blue-500 text-white">
-				Reset
-			</button>
-		</div>
-	);
-}
-
-export default Home;
Index: frontend/src/components/SubjectCatalog.tsx
===================================================================
--- frontend/src/components/SubjectCatalog.tsx	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
+++ frontend/src/components/SubjectCatalog.tsx	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
@@ -0,0 +1,267 @@
+import { useEffect, useState } from "react";
+import { Subject, SubjectInfo } from "../types";
+const SubjectCatalog = () => {
+	const [visibleCourses, setVisibleCourses] = useState<number>(10);
+	const [searchTerm, setSearchTerm] = useState<string>("");
+	const [selectedSubject, setSelectedSubject] = useState<Subject | null>(null);
+	const [subjectData, setSubjectData] = useState<Subject[]>([]);
+	const [extraData, setExtraData] = useState<SubjectInfo[]>([]);
+	const [isLoaded, setIsLoaded] = useState(false);
+
+	const SkeletonCard = () => {
+		return (
+			<div className="w-full px-4 py-8 border rounded-md shadow animate-pulse bg-white">
+				<div className="h-4 w-3/4 bg-gray-300 rounded mb-2.5"></div>
+				<div className="h-4 w-1/2 bg-gray-200 rounded mb-7"></div>
+
+				<div className="h-4 w-full bg-gray-200 rounded mb-1"></div>
+				<div className="h-4 w-5/6 bg-gray-200 rounded mb-3"></div>
+
+				<div className="flex gap-2 mb-7">
+					<div className="h-5 w-20 bg-gray-300 rounded-full"></div>
+					<div className="h-5 w-24 bg-gray-300 rounded-full"></div>
+					<div className="h-5 w-16 bg-gray-300 rounded-full"></div>
+				</div>
+
+				<div className="flex justify-between items-center">
+					<div className="h-6 w-20 bg-gray-300 rounded-lg"></div>
+					<div className="h-6 w-20 bg-gray-300 rounded-full"></div>
+				</div>
+			</div>
+		);
+	};
+
+	useEffect(() => {
+		const fetchData = async () => {
+			const response = await fetch("http://localhost:8000/api");
+			const data = await response.json();
+			setSubjectData(data.rows);
+			const object_data: SubjectInfo[] = data.rows.map((item: Subject) => {
+				return item.info;
+			});
+			console.log(object_data);
+			setExtraData(object_data);
+			setIsLoaded(true);
+		};
+		fetchData();
+	}, []);
+
+	const loadMore = () => {
+		setVisibleCourses((prev) => prev + 10);
+	};
+
+	const openSubjectDetails = (subject: Subject) => {
+		setSelectedSubject(subject);
+		console.log(subject);
+	};
+
+	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">
+				{/* filters sidebar */}
+				<div className="w-full md:w-64 bg-gray-50 p-4 rounded-lg">
+					<div className="flex justify-between items-center mb-4">
+						<h2 className="text-lg font-semibold">Филтери</h2>
+						<button
+							onClick={() => console.log("reset filters; not implemented yet")}
+							className="text-sm text-gray-600 hover:text-gray-900"
+						>
+							Избриши
+						</button>
+					</div>
+
+					{/* TODO: add more filters following this template*/}
+					<div className="mb-4">
+						<h3 className="font-medium mb-2">Filter criterium</h3>
+						<div className="space-y-1">
+							{["filter_value1", "filter_value2", "filter_value3"].map(
+								(dept) => (
+									<div key={dept} className="flex items-center">
+										<input
+											type="checkbox"
+											id={`dept-${dept}`}
+											checked={true}
+											onChange={() =>
+												console.log("filtering logic; not implemented yet")
+											}
+											className="h-4 w-4 rounded border-gray-300 text-blue-600"
+										/>
+										<label
+											htmlFor={`dept-${dept}`}
+											className="ml-2 text-sm text-gray-700"
+										>
+											{dept}
+										</label>
+									</div>
+								)
+							)}
+						</div>
+					</div>
+				</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">
+							Search
+						</button>
+					</div>
+
+					{/* Course grid */}
+
+					{!isLoaded ? (
+						<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
+							{[...Array(6)].map((_, index) => (
+								<SkeletonCard key={index} />
+							))}
+						</div>
+					) : (
+						<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
+							{subjectData.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">
+										<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">
+											<strong>tuka treba abstract:</strong> Lorem ipsum dolor
+											sit, amet consectetur adipisicing elit. Et praesentium
+											dolores est animi officiis aperiam.
+											{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 justify-between 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
+												</div>
+												<div className="bg-green-500 px-1 py-1 rounded-full text-sm font-medium">
+													TAG2
+												</div>
+											</div>
+											<button
+												onClick={() => openSubjectDetails(subject)}
+												className="flex items-center text-gray-700 hover:text-gray-900"
+											>
+												<svg
+													className="w-4 h-4 mr-1"
+													fill="none"
+													stroke="currentColor"
+													viewBox="0 0 24 24"
+													xmlns="http://www.w3.org/2000/svg"
+												>
+													<path
+														strokeLinecap="round"
+														strokeLinejoin="round"
+														strokeWidth={2}
+														d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"
+													/>
+													<path
+														strokeLinecap="round"
+														strokeLinejoin="round"
+														strokeWidth={2}
+														d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
+													/>
+												</svg>
+												Погледни детали
+											</button>
+											{/* this could lead to a subject view page, for now there is no such thing*/}
+											{/* if implemented, tags should be moved elsewhere*/}
+											{/* <button
+											onClick={() => openCourseDetails(course)}
+											className="flex items-center text-blue-600 hover:text-blue-800"
+										>
+											Погледни детали
+											<svg
+												className="w-4 h-4 ml-1"
+												fill="none"
+												stroke="currentColor"
+												viewBox="0 0 24 24"
+												xmlns="http://www.w3.org/2000/svg"
+											>
+												<path
+													strokeLinecap="round"
+													strokeLinejoin="round"
+													strokeWidth={2}
+													d="M9 5l7 7-7 7"
+												/>
+											</svg>
+										</button> */}
+										</div>
+									</div>
+								</div>
+							))}
+						</div>
+					)}
+
+					{/* Load more button */}
+					{isLoaded && subjectData.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 && subjectData.length === 0 && (
+						<div className="text-center py-12">
+							<p className="text-gray-500 text-lg">
+								Не постојат такви предмети
+							</p>
+							<button
+								onClick={() =>
+									console.log("reset filters; not implemented yet")
+								}
+								className="mt-2 text-blue-600 hover:text-blue-800"
+							>
+								Ресетирај филтри
+							</button>
+						</div>
+					)}
+				</div>
+			</div>
+		</div>
+	);
+};
+
+export default SubjectCatalog;
Index: frontend/src/pages/Home.tsx
===================================================================
--- frontend/src/pages/Home.tsx	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
+++ frontend/src/pages/Home.tsx	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
@@ -0,0 +1,106 @@
+import { useEffect, useState } from "react";
+import { Subject, SubjectInfo } from "../types";
+
+type ValidHeader = Extract<keyof Subject, "name" | "code">;
+const subject_values: ValidHeader[] = ["name", "code"];
+// const subject_values: (keyof Subject)[] = ["name", "code"];
+
+function Home() {
+	const [data, setData] = useState<Subject[]>([]);
+	const [extraData, setExtraData] = useState<SubjectInfo[]>([]);
+	const [showData, setShowData] = useState<boolean[]>([]);
+	const [isLoaded, setIsLoaded] = useState(false);
+	const [limit, setLimit] = useState(10);
+
+	const toggleInfo = (index: number) => {
+		console.log(extraData[index]);
+		console.log(extraData);
+		setShowData((prev) =>
+			prev.map((value, i) => (i === index ? !value : value))
+		);
+		console.log(showData);
+	};
+
+	const renderData = (data: SubjectInfo) => {
+		return Object.keys(data)
+			.slice(1)
+			.map((key) => {
+				const typedKey = key as keyof SubjectInfo;
+				const field = data[typedKey];
+				return Array.isArray(field) ? (
+					<p>
+						{key}: {field.length === 0 ? "/" : field.join(", ")}
+					</p>
+				) : (
+					<p>
+						{key}: {field === "" ? "/" : field.toString()}
+					</p>
+				);
+			});
+	};
+
+	useEffect(() => {
+		const fetchData = async () => {
+			const response = await fetch("http://localhost:8000/api");
+			const data = await response.json();
+			setData(data.rows);
+			const object_data: SubjectInfo[] = data.rows.map((item: Subject) => {
+				return item.info;
+			});
+			console.log(object_data);
+			setExtraData(object_data);
+			setShowData(Array(object_data.length).fill(false));
+			setIsLoaded(true);
+		};
+		fetchData();
+	}, []);
+	return !isLoaded ? (
+		<p>Loading...</p>
+	) : (
+		<div className="ml-2 flex-col">
+			{data.slice(0, limit).map((item: Subject, index: number) => {
+				return (
+					<div
+						key={item.code}
+						className="p-5 rounded-md border flex gap-12
+						border-black mt-1 bg-blue-200"
+					>
+						<div className="w-80">
+							<p>Subject:</p>
+							{subject_values.map((header) => {
+								return (
+									<p key={header}>
+										{header}: {item[header]}
+									</p>
+								);
+							})}
+							<button
+								onClick={() => toggleInfo(index)}
+								className="rounded-md p-1.5 mt-1 bg-blue-500 text-sm text-white"
+							>
+								{showData[index] ? "hide " : "show "} info
+							</button>
+						</div>
+						{showData[index] && (
+							<div>
+								<p>Subject info:</p>
+								{renderData(extraData[index])}
+							</div>
+						)}
+					</div>
+				);
+			})}
+			<button
+				className="rounded-md border p-3 my-3 bg-blue-500 text-white"
+				onClick={() => setLimit(limit + 10)}
+			>
+				Load more
+			</button>
+			<button className="rounded-md border p-3 my-3 ml-3 bg-blue-500 text-white">
+				Reset
+			</button>
+		</div>
+	);
+}
+
+export default Home;
Index: frontend/src/pages/Test.tsx
===================================================================
--- frontend/src/pages/Test.tsx	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
+++ frontend/src/pages/Test.tsx	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
@@ -0,0 +1,7 @@
+import SubjectCatalog from "../components/SubjectCatalog";
+
+function Test() {
+	return <SubjectCatalog />;
+}
+
+export default Test;
Index: frontend/src/types.ts
===================================================================
--- frontend/src/types.ts	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
+++ frontend/src/types.ts	(revision 02269e16fe9c7bff90e07a0c0ee9e6bfef8e5b21)
@@ -0,0 +1,214 @@
+export interface Subject {
+	id: number;
+	code: string;
+	name: string;
+	abstract: string;
+	info: SubjectInfo;
+}
+
+export interface SubjectInfo {
+	level: number;
+	short: string;
+	prerequisite: string;
+	activated: boolean;
+	participants: number[];
+	mandatory: boolean;
+	mandatory_for: string[];
+	semester: number;
+	season: string;
+	elective_for: string[];
+	professors: string[];
+	assistants: string[];
+}
+
+export interface Course {
+	id: number;
+	name: string;
+	code: string;
+	credits: number;
+	description: string;
+	department: string;
+	semester: string;
+	duration: string;
+	prerequisites: string;
+	level: "Beginner" | "Intermediate" | "Advanced";
+	tags: string[];
+	learningOutcomes?: string[];
+}
+
+export const courseData: Course[] = [
+	{
+		id: 1,
+		name: "Introduction to Computer Science",
+		code: "CS 101",
+		credits: 3,
+		description:
+			"A foundational course covering the basic principles of computer science, including algorithms, data structures, and problem-solving techniques.",
+		department: "Computer Science",
+		semester: "Fall",
+		duration: "15 weeks",
+		prerequisites: "None",
+		level: "Beginner",
+		tags: ["Programming", "Algorithms", "Beginner"],
+		learningOutcomes: [
+			"Understand fundamental programming concepts",
+			"Develop basic problem-solving skills",
+			"Implement simple algorithms",
+			"Analyze program efficiency",
+		],
+	},
+	{
+		id: 2,
+		name: "Data Structures and Algorithms",
+		code: "CS 201",
+		credits: 4,
+		description:
+			"An in-depth exploration of data structures and algorithms, focusing on implementation, analysis, and application to real-world problems.",
+		department: "Computer Science",
+		semester: "Spring",
+		duration: "15 weeks",
+		prerequisites: "CS 101",
+		level: "Intermediate",
+		tags: ["Data Structures", "Algorithms", "Intermediate"],
+	},
+	{
+		id: 3,
+		name: "Database Systems",
+		code: "CS 301",
+		credits: 3,
+		description:
+			"Introduction to database design, implementation, and management, covering relational models, SQL, and database optimization techniques.",
+		department: "Computer Science",
+		semester: "Fall",
+		duration: "15 weeks",
+		prerequisites: "CS 201",
+		level: "Intermediate",
+		tags: ["Databases", "SQL", "Intermediate"],
+	},
+	{
+		id: 4,
+		name: "Artificial Intelligence",
+		code: "CS 401",
+		credits: 4,
+		description:
+			"Exploration of AI concepts including search algorithms, knowledge representation, machine learning, and natural language processing.",
+		department: "Computer Science",
+		semester: "Spring",
+		duration: "15 weeks",
+		prerequisites: "CS 201, MATH 240",
+		level: "Advanced",
+		tags: ["AI", "Machine Learning", "Advanced"],
+	},
+	{
+		id: 5,
+		name: "Calculus I",
+		code: "MATH 101",
+		credits: 4,
+		description:
+			"Introduction to differential and integral calculus, covering limits, derivatives, integrals, and their applications.",
+		department: "Mathematics",
+		semester: "Fall",
+		duration: "15 weeks",
+		prerequisites: "None",
+		level: "Beginner",
+		tags: ["Calculus", "Mathematics", "Beginner"],
+	},
+	{
+		id: 6,
+		name: "Linear Algebra",
+		code: "MATH 201",
+		credits: 3,
+		description:
+			"Study of vector spaces, linear transformations, matrices, determinants, eigenvalues, and eigenvectors.",
+		department: "Mathematics",
+		semester: "Spring",
+		duration: "15 weeks",
+		prerequisites: "MATH 101",
+		level: "Intermediate",
+		tags: ["Linear Algebra", "Mathematics", "Intermediate"],
+	},
+	{
+		id: 7,
+		name: "Classical Mechanics",
+		code: "PHYS 201",
+		credits: 4,
+		description:
+			"Study of motion, forces, energy, and momentum in physical systems using Newtonian mechanics.",
+		department: "Physics",
+		semester: "Fall",
+		duration: "15 weeks",
+		prerequisites: "PHYS 101, MATH 101",
+		level: "Intermediate",
+		tags: ["Mechanics", "Physics", "Intermediate"],
+	},
+	{
+		id: 8,
+		name: "Electromagnetics",
+		code: "PHYS 301",
+		credits: 4,
+		description:
+			"Study of electromagnetic fields, waves, and their applications in modern technology.",
+		department: "Physics",
+		semester: "Spring",
+		duration: "15 weeks",
+		prerequisites: "PHYS 201, MATH 201",
+		level: "Advanced",
+		tags: ["Electromagnetics", "Physics", "Advanced"],
+	},
+	{
+		id: 9,
+		name: "Circuit Analysis",
+		code: "ENG 201",
+		credits: 3,
+		description:
+			"Introduction to the analysis of electrical circuits, including DC and AC circuits, network theorems, and operational amplifiers.",
+		department: "Engineering",
+		semester: "Fall",
+		duration: "15 weeks",
+		prerequisites: "PHYS 201, MATH 201",
+		level: "Intermediate",
+		tags: ["Circuits", "Engineering", "Intermediate"],
+	},
+	{
+		id: 10,
+		name: "Signals and Systems",
+		code: "ENG 301",
+		credits: 4,
+		description:
+			"Analysis of continuous and discrete signals and systems in both time and frequency domains.",
+		department: "Engineering",
+		semester: "Spring",
+		duration: "15 weeks",
+		prerequisites: "ENG 201, MATH 301",
+		level: "Advanced",
+		tags: ["Signals", "Systems", "Engineering", "Advanced"],
+	},
+	{
+		id: 11,
+		name: "Discrete Mathematics",
+		code: "MATH 240",
+		credits: 3,
+		description:
+			"Introduction to discrete mathematical structures including sets, logic, combinatorics, graphs, and number theory.",
+		department: "Mathematics",
+		semester: "Fall",
+		duration: "15 weeks",
+		prerequisites: "MATH 101",
+		level: "Intermediate",
+		tags: ["Discrete Math", "Mathematics", "Intermediate"],
+	},
+	{
+		id: 12,
+		name: "Operating Systems",
+		code: "CS 350",
+		credits: 4,
+		description:
+			"Study of operating system principles, including process management, memory management, file systems, and security.",
+		department: "Computer Science",
+		semester: "Fall",
+		duration: "15 weeks",
+		prerequisites: "CS 201",
+		level: "Advanced",
+		tags: ["OS", "Systems", "Advanced"],
+	},
+];
