Index: backend/auth_form/migrations/0012_remove_student_level_credits_and_more.py
===================================================================
--- backend/auth_form/migrations/0012_remove_student_level_credits_and_more.py	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
+++ backend/auth_form/migrations/0012_remove_student_level_credits_and_more.py	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -0,0 +1,26 @@
+# Generated by Django 5.1.7 on 2025-06-01 16:38
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('auth_form', '0011_alter_student_level_credits'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='student',
+            name='level_credits',
+        ),
+        migrations.RemoveField(
+            model_name='student',
+            name='total_credits',
+        ),
+        migrations.AddField(
+            model_name='student',
+            name='has_extracurricular',
+            field=models.BooleanField(default=False, null=True),
+        ),
+    ]
Index: backend/auth_form/models.py
===================================================================
--- backend/auth_form/models.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ backend/auth_form/models.py	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -64,6 +64,7 @@
     favorite_professors = ArrayField(models.CharField(max_length=64), null=True, blank=True)
     passed_subjects = models.ManyToManyField('subjects.subject', related_name="passed_subjects", blank=True)
-    total_credits = models.PositiveIntegerField(null=True)
-    level_credits = ArrayField(models.PositiveIntegerField(null=True), null=True, blank=True)
+    has_extracurricular = models.BooleanField(default=False, null=True)
+    # total_credits = models.PositiveIntegerField(null=True)
+    # level_credits = ArrayField(models.PositiveIntegerField(null=True), null=True, blank=True)
     
     # {1: [s1, s2, s3...], 2: [....], ...}
Index: backend/auth_form/serializers.py
===================================================================
--- backend/auth_form/serializers.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ backend/auth_form/serializers.py	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -73,8 +73,15 @@
     class Meta:
         model = Student
-        exclude = ['user', 'has_filled_form']
+        exclude = ['user', 'has_filled_form', 'id']
     
     def to_representation(self, instance):
         rep = super().to_representation(instance)
         rep['passed_subjects'] = SubjectSerializer(instance.passed_subjects.all(), many=True).data
+        # Fix: fetch Subject objects for each semester's subject IDs
+        rep['passed_subjects_per_semester'] = {
+            str(sem): SubjectSerializer(
+                Subject.objects.filter(id__in=subjects), many=True
+            ).data
+            for sem, subjects in (instance.passed_subjects_per_semester or {}).items()
+        }
         return rep
Index: frontend/src/components/StudentForm/FieldButton.tsx
===================================================================
--- frontend/src/components/StudentForm/FieldButton.tsx	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
+++ frontend/src/components/StudentForm/FieldButton.tsx	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -0,0 +1,62 @@
+import { Dispatch, SetStateAction } from "react";
+import { toggleSelection } from "./utils";
+
+const FieldButton: React.FC<{
+	keyProp: string | number;
+	state: string[];
+	stateSetter: Dispatch<SetStateAction<any[]>>;
+	field: "prof" | "tech" | "eval" | "domains";
+	isSelected: boolean;
+	isDisabled: boolean;
+	setIsNemamSelected: Dispatch<
+		SetStateAction<{
+			domains: boolean;
+			tech: boolean;
+			eval: boolean;
+			prof: boolean;
+		}>
+	>;
+}> = ({
+	keyProp,
+	state,
+	stateSetter,
+	field,
+	isSelected,
+	isDisabled,
+	setIsNemamSelected,
+}) => {
+	const handleClick = () => {
+		if (keyProp === "Немам") {
+			if (state.includes("None")) {
+				stateSetter([]);
+			} else {
+				stateSetter(["None"]);
+			}
+			setIsNemamSelected((prev) => ({
+				...prev,
+				[field]: !prev[field],
+			}));
+		} else {
+			const new_ = state.filter((t) => t !== "Немам");
+			toggleSelection(keyProp, stateSetter, new_);
+		}
+	};
+
+	return (
+		<button
+			type="button"
+			key={keyProp}
+			onClick={handleClick}
+			disabled={isDisabled}
+			className={`px-3 py-2 border rounded-md transition-colors ${
+				isSelected
+					? "bg-yellow-100 border-yellow-300 text-yellow-800"
+					: "bg-white hover:bg-gray-50 border-gray-300"
+			} ${isDisabled ? "opacity-50 cursor-not-allowed" : ""}`}
+		>
+			{keyProp}
+		</button>
+	);
+};
+
+export default FieldButton;
Index: frontend/src/components/StudentForm/StudentForm.tsx
===================================================================
--- frontend/src/components/StudentForm/StudentForm.tsx	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ frontend/src/components/StudentForm/StudentForm.tsx	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -1,3 +1,3 @@
-import { Dispatch, SetStateAction, useEffect, useState } from "react";
+import { useEffect, useState } from "react";
 import {
 	EVALUATIONS,
@@ -8,8 +8,14 @@
 } from "../../constants/subjects";
 import { useAuth } from "../../hooks/useAuth";
-import { Programs, StudentData, Subject, SubjectID } from "../types";
+import { Programs, StudentData, Subject } from "../types";
+import FieldButton from "./FieldButton";
 import SkeletonForm from "./SkeletonForm";
 import SubjectsSelector from "./SubjectsSelector";
-import { LatinToCyrillic } from "./utils";
+import {
+	getPassedSubjectsByID,
+	LatinToCyrillic,
+	mapToID,
+	validateForm,
+} from "./utils";
 
 interface StudentFormProps {
@@ -36,14 +42,9 @@
 	);
 	const [year, setYear] = useState(formData?.current_year || 1);
-	const [passedSubjects, setPassedSubjects] = useState<Subject[]>(
-		formData?.passed_subjects || []
-	);
 	const [passedSubjectsPerSemester, setPassedSubjectsPerSemester] = useState<
-		Record<number, SubjectID[]>
+		Record<number, Subject[]>
 	>(
 		formData?.passed_subjects_per_semester ??
-			Object.fromEntries(
-				Array.from({ length: 8 }, (_, i) => [i + 1, [] as SubjectID[]])
-			)
+			Object.fromEntries(Array.from({ length: 8 }, (_, i) => [[i + 1], []]))
 	);
 	const [studyEffort, setStudyEffort] = useState(formData?.study_effort || "");
@@ -95,14 +96,37 @@
 			setStudyTrack((formData.study_track as Programs) || "");
 			setYear(formData.current_year || 1);
-			setPassedSubjects(formData.passed_subjects || []);
 			setStudyEffort(formData.study_effort || "");
-			setDomains(formData.preferred_domains || []);
-			setTechnologies(formData.preferred_technologies || []);
-			setEvaluation(formData.preferred_evaluation || []);
-			setFavoriteProfs(formData.favorite_professors || []);
-			setPassedSubjectsPerSemester(
-				formData.passed_subjects_per_semester ||
-					Object.fromEntries(Array.from({ length: 8 }, (_, i) => [i + 1, []]))
+
+			const domains_ = (formData.preferred_domains || []).includes("None")
+				? []
+				: formData.preferred_domains || [];
+			setDomains(domains_);
+
+			const technologies_ = (formData.preferred_technologies || []).includes(
+				"None"
+			)
+				? []
+				: formData.preferred_technologies || [];
+			setTechnologies(technologies_);
+
+			const eval_ = (formData.preferred_evaluation || []).map(
+				(val: string) =>
+					Object.keys(EVALUATIONS_MAP).find(
+						(key) =>
+							EVALUATIONS_MAP[key as keyof typeof EVALUATIONS_MAP] === val
+					) || val
 			);
+			setEvaluation(
+				eval_.includes("Немам") || eval_.includes("None") ? [] : eval_
+			);
+
+			const favoriteProfs_ = (formData.favorite_professors || []).includes(
+				"None"
+			)
+				? []
+				: formData.favorite_professors || [];
+			setFavoriteProfs(favoriteProfs_);
+
+			setPassedSubjectsPerSemester(formData.passed_subjects_per_semester || []);
 		}
 	}, [formData]);
@@ -135,9 +159,7 @@
 						professors: allProfessors_,
 					}));
-					// setIsLoading(false);
 				}
 			} catch (error) {
 				console.error("Error fetching subjects:", error);
-				// setIsLoading(false);
 			}
 		};
@@ -146,99 +168,33 @@
 	}, []);
 
-	const validateForm = () => {
-		const errors: { [key: string]: string } = {};
-
-		if (!index.trim()) {
-			errors.index = "Индексот e задолжителен.";
-		} else if (!/^\d{6}$/.test(index)) {
-			errors.index = "Индексот треба да има точно 6 цифри.";
-		}
-		if (!studyTrack) errors.studyTrack = "Одбери насока.";
-		if (!year) errors.year = "Одбери година.";
-		if (!studyEffort) errors.studyEffort = "Одбери пожелен вложен труд.";
-		if (passedSubjects.length === 0)
-			errors.passedSubjects = "Одбери барем еден предмет.";
-		// if (domains.length === 0) errors.domains = "Одбери барем едно поле.";
-		// if (technologies.length === 0)
-		// 	errors.technologies = "Одбери барем една технологија.";
-		if (!evaluation) errors.evaluation = "Одбери тип на оценување.";
-		return errors;
-	};
-
-	const toggleSelection = (
-		value: string | number,
-		setter: React.Dispatch<React.SetStateAction<any[]>>,
-		current: any[]
-	) => {
-		if (current.includes(value)) {
-			setter(current.filter((v) => v !== value));
-		} else {
-			setter([...current, value]);
-		}
-	};
-
-	// const toggleSubject = (subject: Subject) => {
-	// 	const exists = passedSubjects.some((s) => s.id === subject.id);
-	// 	if (exists) {
-	// 		setPassedSubjects(passedSubjects.filter((s) => s.id !== subject.id));
-	// 	} else {
-	// 		setPassedSubjects([...passedSubjects, subject]);
-	// 	}
-	// };
-
-	const toggleSubjectByID = (id: SubjectID, semester: number) => {
-		const exists_table1 = passedSubjects.some((s) => s.id === id);
-		const exists_table2 = passedSubjectsPerSemester[semester]?.includes(id);
-		if (exists_table1 !== exists_table2) {
-			alert("ABSDSAADSKNDSAKNASADSNADSKNDASKADSN");
-			throw Error;
-		}
-		if (exists_table1) {
-			setPassedSubjects(passedSubjects.filter((s) => s.id !== id));
+	const toggleSubject = (subject: Subject, semester: number) => {
+		const exists = passedSubjectsPerSemester[semester].some(
+			(s) => s.id === subject.id
+		);
+		if (exists) {
 			setPassedSubjectsPerSemester({
 				...passedSubjectsPerSemester,
 				[semester]: passedSubjectsPerSemester[semester].filter(
-					(id_: SubjectID) => id_ != id
+					(s) => s.id != subject.id
 				),
 			});
 		} else {
-			const subject = subjects.find((s) => s.id == id);
-			if (subject) {
-				setPassedSubjects([...passedSubjects, subject]);
-				setPassedSubjectsPerSemester({
-					...passedSubjectsPerSemester,
-					[semester]: [...(passedSubjectsPerSemester[semester] || []), id],
-				});
-			}
+			setPassedSubjectsPerSemester({
+				...passedSubjectsPerSemester,
+				[semester]: [...(passedSubjectsPerSemester[semester] || []), subject],
+			});
 		}
 	};
-	const getLevelCredits = () => {
-		return passedSubjects.reduce(
-			(acc, subject) => {
-				if (
-					studyTrack &&
-					!subject.subject_info.mandatory_for.includes(studyTrack)
-				) {
-					const level = subject.subject_info.level;
-					acc[level - 1] += 6;
-				}
-				return acc;
-			},
-			[0, 0, 0]
-		);
-	};
-
-	const getCredits = () => {
-		const credits = (passedSubjects.length + Number(hasExtracurricular)) * 6;
-		return passedSubjects.some((s) => s.name == "Професионални вештини") &&
-			passedSubjects.some((s) => s.name == "Спорт и здравје")
-			? credits - 6
-			: credits;
-	};
 
 	const handleSubmit = async (e: React.FormEvent) => {
 		e.preventDefault();
 
-		const errors = validateForm();
+		const errors = validateForm({
+			index,
+			studyTrack,
+			year,
+			studyEffort,
+			passedSubjectsPerSemester,
+		});
 		if (Object.keys(errors).length > 0) {
 			setValidationErrors(errors);
@@ -257,21 +213,22 @@
 			isError: false,
 		});
+
 		const payload = {
 			index,
 			study_track: studyTrack,
 			current_year: year,
-			passed_subjects: passedSubjects.map((subject) => subject.id),
+			passed_subjects: getPassedSubjectsByID(passedSubjectsPerSemester),
 			study_effort: studyEffort,
 			preferred_domains: domains,
 			preferred_technologies: technologies,
 			preferred_evaluation: evaluation.map(
-				(ev) => EVALUATIONS_MAP[ev as keyof typeof EVALUATIONS_MAP]
+				(ev) => EVALUATIONS_MAP[ev as keyof typeof EVALUATIONS_MAP] ?? ev
 			),
 			favorite_professors: favoriteProfs,
-			passed_subjects_per_semester: passedSubjectsPerSemester,
-			total_credits: getCredits(),
-			level_credits: getLevelCredits(),
+			passed_subjects_per_semester: mapToID(passedSubjectsPerSemester),
+			has_extracurricular: hasExtracurricular,
 		};
 		try {
+			console.log(payload);
 			// For updating existing form data use PATCH instead of PUT for partial updates
 			const method = formData?.current_year || isSubmitted ? "PATCH" : "POST";
@@ -313,45 +270,4 @@
 	};
 
-	const FieldButton: React.FC<{
-		keyProp: string | number;
-		state: string[];
-		stateSetter: Dispatch<SetStateAction<any[]>>;
-		field: "prof" | "tech" | "eval" | "domains";
-		isSelected: boolean;
-		isDisabled: boolean;
-	}> = ({ keyProp, state, stateSetter, field, isSelected, isDisabled }) => {
-		const handleClick = () => {
-			if (keyProp === "Немам") {
-				if (state.includes("None")) {
-					stateSetter([]);
-				} else {
-					stateSetter(["None"]);
-				}
-				setIsNemamSelected((prev) => ({
-					...prev,
-					[field]: !prev[field],
-				}));
-			} else {
-				const new_ = state.filter((t) => t !== "Немам");
-				toggleSelection(keyProp, stateSetter, new_);
-			}
-		};
-
-		return (
-			<button
-				type="button"
-				key={keyProp}
-				onClick={handleClick}
-				disabled={isDisabled}
-				className={`px-3 py-2 border rounded-md transition-colors ${
-					isSelected
-						? "bg-yellow-100 border-yellow-300 text-yellow-800"
-						: "bg-white hover:bg-gray-50 border-gray-300"
-				} ${isDisabled ? "opacity-50 cursor-not-allowed" : ""}`}
-			>
-				{keyProp}
-			</button>
-		);
-	};
 	const filteredMandatorySubjects = studyTrack
 		? subjects
@@ -364,10 +280,8 @@
 		: [];
 	const filteredElectiveSubjects = studyTrack
-		? subjects.filter(
-				(subj) => subj.subject_info.elective_for.includes(studyTrack)
-				// subj.subject_info.semester <= year * 2
+		? subjects.filter((subj) =>
+				subj.subject_info.elective_for.includes(studyTrack)
 		  )
-		: // .sort((a, b) => a.subject_info.semester - b.subject_info.semester)
-		  [];
+		: [];
 
 	const filteredProfessors = distinctSubjectData.professors.filter(
@@ -422,5 +336,21 @@
 					<select
 						value={studyTrack}
-						onChange={(e) => setStudyTrack(e.target.value as Programs | "")}
+						onChange={(e) => {
+							const newTrack = e.target.value as Programs;
+							const filteredPassedSubjectsPerSemester = Object.fromEntries(
+								Object.entries(passedSubjectsPerSemester).map(
+									([semester, subjects]) => [
+										semester,
+										subjects.filter(
+											(subj) =>
+												subj.subject_info.mandatory_for.includes(newTrack) ||
+												subj.subject_info.elective_for.includes(newTrack)
+										),
+									]
+								)
+							);
+							setPassedSubjectsPerSemester(filteredPassedSubjectsPerSemester);
+							setStudyTrack(newTrack);
+						}}
 						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 custom-select"
 					>
@@ -465,12 +395,9 @@
 				filteredMandatorySubjects={filteredMandatorySubjects}
 				filteredElectiveSubjects={filteredElectiveSubjects}
-				passedSubjects={passedSubjects}
-				// toggleSubject={toggleSubject}
-				toggleSubjectByID={toggleSubjectByID}
+				toggleSubject={toggleSubject}
 				semesterSearchTerms={semesterSearchTerms}
 				setSemesterSearchTerms={setSemesterSearchTerms}
 				validationErrors={validationErrors}
 				passedSubjectsPerSemester={passedSubjectsPerSemester}
-				setPassedSubjectsPerSemester={setPassedSubjectsPerSemester}
 			/>
 			<div>
@@ -509,21 +436,4 @@
 						</label>
 					))}
-					{/* 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 && (
@@ -553,4 +463,5 @@
 								isSelected={isSelected}
 								isDisabled={shouldBeDisabled}
+								setIsNemamSelected={setIsNemamSelected}
 							/>
 						);
@@ -583,4 +494,5 @@
 								isSelected={isSelected}
 								isDisabled={shouldBeDisabled}
+								setIsNemamSelected={setIsNemamSelected}
 							/>
 						);
@@ -613,4 +525,5 @@
 								isSelected={isSelected}
 								isDisabled={shouldBeDisabled}
+								setIsNemamSelected={setIsNemamSelected}
 							/>
 						);
@@ -659,4 +572,5 @@
 									isSelected={isSelected}
 									isDisabled={shouldBeDisabled}
+									setIsNemamSelected={setIsNemamSelected}
 								/>
 							);
Index: frontend/src/components/StudentForm/SubjectsSelector.tsx
===================================================================
--- frontend/src/components/StudentForm/SubjectsSelector.tsx	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ frontend/src/components/StudentForm/SubjectsSelector.tsx	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -1,4 +1,3 @@
-import { Dispatch, SetStateAction } from "react";
-import { Programs, Subject, SubjectID } from "../types";
+import { Programs, Subject } from "../types";
 import { LatinToCyrillic } from "./utils";
 
@@ -8,13 +7,9 @@
 	filteredMandatorySubjects: Subject[];
 	filteredElectiveSubjects: Subject[];
-	passedSubjects: Subject[];
-	toggleSubjectByID: (id: SubjectID, semester: number) => void;
+	toggleSubject: (id: Subject, semester: number) => void;
 	semesterSearchTerms: Record<number, string>;
 	setSemesterSearchTerms: (term: any) => void;
 	validationErrors: { [key: string]: string };
-	passedSubjectsPerSemester: Record<number, SubjectID[]>;
-	setPassedSubjectsPerSemester: Dispatch<
-		SetStateAction<Record<number, SubjectID[]>>
-	>;
+	passedSubjectsPerSemester: Record<number, Subject[]>;
 }
 
@@ -39,12 +34,10 @@
 	filteredMandatorySubjects,
 	filteredElectiveSubjects,
-	passedSubjects,
-	toggleSubjectByID,
+	toggleSubject,
 	semesterSearchTerms,
 	setSemesterSearchTerms,
 	validationErrors,
 	passedSubjectsPerSemester,
-}: // setPassedSubjectsPerSemester,
-SubjectsSelectorProps) {
+}: SubjectsSelectorProps) {
 	return (
 		<div>
@@ -75,6 +68,4 @@
 							);
 
-							// const semesterElectives = filteredElectiveSubjects;
-
 							const totalSlots = semester === 1 ? 5 : 6;
 							const electiveSlots = totalSlots - semesterMandatory.length;
@@ -85,11 +76,9 @@
 									: seasonElectives;
 
-							const selectedElectivesForSemester = passedSubjects
-								.filter(
-									(subject) =>
-										passedSubjectsPerSemester[semester]?.includes(subject.id) &&
-										!subject.subject_info.mandatory_for.includes(studyTrack)
-								)
-								.map((subject) => subject.id);
+							const selectedElectivesForSemester = passedSubjectsPerSemester[
+								semester
+							].filter((subject) =>
+								subject.subject_info.elective_for.includes(studyTrack)
+							);
 							return (
 								<div
@@ -111,12 +100,10 @@
 														const isSelected = passedSubjectsPerSemester[
 															semester
-														].some((s) => s === subject.id);
+														].some((s) => s.id === subject.id);
 														return (
 															<button
 																type="button"
 																key={subject.id}
-																onClick={() =>
-																	toggleSubjectByID(subject.id, semester)
-																}
+																onClick={() => toggleSubject(subject, semester)}
 																className={`flex items-center gap-2 px-3 py-2 border rounded-md transition-all duration-200 text-sm
                                   ${
@@ -165,10 +152,10 @@
 													<div className="mb-3">
 														<div className="flex flex-wrap gap-2">
-															{selectedElectivesForSemester.map((id) => (
+															{selectedElectivesForSemester.map((subject) => (
 																<button
 																	type="button"
-																	key={id}
+																	key={subject.id}
 																	onClick={() =>
-																		toggleSubjectByID(id, semester)
+																		toggleSubject(subject, semester)
 																	}
 																	className="flex items-center gap-2 px-3 py-2 border rounded-md transition-all duration-200 text-sm bg-green-500 text-white border-green-600 shadow-md"
@@ -176,11 +163,5 @@
 																>
 																	<TickSvg />
-																	<span>
-																		{
-																			passedSubjects.find(
-																				(item) => item.id == id
-																			)?.name
-																		}
-																	</span>
+																	<span>{subject.name}</span>
 																</button>
 															))}
@@ -199,9 +180,10 @@
 																.filter(
 																	(subject) =>
-																		!passedSubjects.some(
-																			(s) =>
-																				s.id === subject.id &&
-																				!semesterMandatory.includes(subject)
+																		!Object.values(
+																			passedSubjectsPerSemester
+																		).some((arr) =>
+																			arr.some((s) => s.id === subject.id)
 																		) &&
+																		!semesterMandatory.includes(subject) &&
 																		((semesterSearchTerms[semester] || "") ===
 																			"" ||
@@ -235,5 +217,5 @@
 																					[semester]: "",
 																				}));
-																				toggleSubjectByID(subject.id, semester);
+																				toggleSubject(subject, semester);
 																			}
 																		}}
@@ -267,7 +249,7 @@
 			)}
 
-			{validationErrors.passedSubjects && (
+			{validationErrors.passedSubjectsPerSemester && (
 				<p className="mt-3 text-sm text-red-600 font-bold">
-					{validationErrors.passedSubjects}
+					{validationErrors.passedSubjectsPerSemester}
 				</p>
 			)}
Index: frontend/src/components/StudentForm/utils.ts
===================================================================
--- frontend/src/components/StudentForm/utils.ts	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ frontend/src/components/StudentForm/utils.ts	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -1,2 +1,4 @@
+import { Programs, Subject } from "../types";
+
 // NOTE: there is not a single match for the letter 'ѕ' (ѕ како ѕвонче) in the entire db, so both dz and dj are mapped to 'џ'
 // this way you can search for "Menadzment", instead of having to write "Menadjment"
@@ -46,2 +48,64 @@
 
 // console.log(LatinToCyrillic("abvgdGjezhzijklLjmnnjOprstkjufhcchdjsh"));
+
+export const toggleSelection = (
+	value: string | number,
+	setter: React.Dispatch<React.SetStateAction<any[]>>,
+	current: any[]
+) => {
+	if (current.includes(value)) {
+		setter(current.filter((v) => v !== value));
+	} else {
+		setter([...current, value]);
+	}
+};
+
+export const validateForm = ({
+	index,
+	studyTrack,
+	year,
+	studyEffort,
+	passedSubjectsPerSemester,
+}: {
+	index: string;
+	studyTrack: Programs | "";
+	year: number;
+	studyEffort: number | string;
+	passedSubjectsPerSemester: Record<number, Subject[]>;
+}) => {
+	const errors: { [key: string]: string } = {};
+
+	if (!index.trim()) {
+		errors.index = "Индексот e задолжителен.";
+	} else if (!/^\d{6}$/.test(index)) {
+		errors.index = "Индексот треба да има точно 6 цифри.";
+	}
+	if (!studyTrack) errors.studyTrack = "Одбери насока.";
+	if (!year) errors.year = "Одбери година.";
+	if (!studyEffort) errors.studyEffort = "Одбери пожелен вложен труд.";
+	if (passedSubjectsPerSemester[1].length === 0)
+		errors.passedSubjectsPerSemester = "Одбери барем еден предмет.";
+	return errors;
+};
+
+export const mapToID = (passedSubjects: Record<number, Subject[]>) => {
+	return Object.fromEntries(
+		Object.entries(passedSubjects).map(([semester, subjects]) => [
+			semester,
+			subjects.map((subject) => subject.id),
+		])
+	);
+};
+
+export const getPassedSubjects = (
+	passedSubjects: Record<number, Subject[]>
+) => {
+	return Object.values(passedSubjects).flatMap(
+		(subjects: Subject[]) => subjects
+	);
+};
+export const getPassedSubjectsByID = (
+	passedSubjects: Record<number, Subject[]>
+) => {
+	return getPassedSubjects(passedSubjects).map((sub) => sub.id);
+};
Index: frontend/src/components/SubjectCatalog/SubjectCatalog.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SubjectCatalog.tsx	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ frontend/src/components/SubjectCatalog/SubjectCatalog.tsx	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -42,5 +42,4 @@
 			const response = await fetch("http://localhost:8000/subjects");
 			const data = await response.json();
-			console.log(data);
 			setSubjectData(data);
 			setIsLoaded(true);
@@ -56,11 +55,11 @@
 			)
 		);
-		console.log(
-			Array.from(
-				new Set(
-					filteredSubjects.flatMap((sub) => sub.subject_info.technologies)
-				)
-			)
-		);
+		// console.log(
+		// 	Array.from(
+		// 		new Set(
+		// 			filteredSubjects.flatMap((sub) => sub.subject_info.technologies)
+		// 		)
+		// 	)
+		// );
 	}, [subjectData]);
 
Index: frontend/src/components/SubjectCatalog/SubjectModal.tsx
===================================================================
--- frontend/src/components/SubjectCatalog/SubjectModal.tsx	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ frontend/src/components/SubjectCatalog/SubjectModal.tsx	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -20,5 +20,4 @@
 		if (!text) return "";
 		const words = text.split(/\s+/);
-		console.log(words.slice(0, WORD_LIMIT).join(" ") + "...");
 		return words.length <= WORD_LIMIT
 			? text
Index: frontend/src/components/types.ts
===================================================================
--- frontend/src/components/types.ts	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ frontend/src/components/types.ts	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -12,9 +12,9 @@
 
 export interface StudentData {
-	id: number;
+	// id: number;
 	index: string;
 	study_track: Programs;
 	current_year: number;
-	passed_subjects: Subject[];
+	// passed_subjects: Subject[];
 	study_effort: number;
 	preferred_domains: string[];
@@ -22,5 +22,5 @@
 	preferred_evaluation: string[];
 	favorite_professors: string[];
-	passed_subjects_per_semester: Record<number, SubjectID[] | []>;
+	passed_subjects_per_semester: Record<number, Subject[] | []>;
 }
 
Index: frontend/src/pages/Register.tsx
===================================================================
--- frontend/src/pages/Register.tsx	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ frontend/src/pages/Register.tsx	(revision 3cbc68070ba2a072b754b74362594bcf491d9a28)
@@ -45,5 +45,4 @@
 
 		try {
-			console.log(formData);
 			const response = await axios.post<{
 				access: string;
@@ -55,7 +54,5 @@
 				full_name: formData.fullName,
 			});
-			console.log(response);
 			const { access, refresh } = response.data;
-			console.log(access, refresh);
 			login(access, refresh);
 			navigate("/");
