Index: frontend/src/App.tsx
===================================================================
--- frontend/src/App.tsx	(revision d450857c320b2ac0b3ca98f976b373659ab4eb00)
+++ frontend/src/App.tsx	(revision b18bbae21883ea04bd3d2e9d8f2a9af31cf2ba98)
@@ -66,4 +66,8 @@
 				element: <SubjectView />,
 			},
+			{
+				path: "*",
+				element: <Home />,
+			},
 		],
 	},
Index: frontend/src/components/StudentForm/StudentForm.tsx
===================================================================
--- frontend/src/components/StudentForm/StudentForm.tsx	(revision d450857c320b2ac0b3ca98f976b373659ab4eb00)
+++ frontend/src/components/StudentForm/StudentForm.tsx	(revision b18bbae21883ea04bd3d2e9d8f2a9af31cf2ba98)
@@ -9,4 +9,5 @@
 import { useRecommendations } from "../../context/RecommendationsContext";
 import { useSubjects } from "../../context/SubjectsContext";
+import { useAuth } from "../../hooks/useAuth";
 import useAxiosAuth from "../../hooks/useAxiosAuth";
 import { StudentData, StudyTrack, Subject } from "../types";
@@ -20,5 +21,4 @@
 	validateForm,
 } from "./utils";
-import { useAuth } from "../../hooks/useAuth";
 
 interface StudentFormProps {
@@ -179,8 +179,8 @@
 
 	useEffect(() => {
-    if (subjects && subjects.length > 0) {
-        setUniqueValues(subjects);
-    }
-}, [subjects, setUniqueValues]); 
+		if (subjects && subjects.length > 0) {
+			setUniqueValues(subjects);
+		}
+	}, [subjects, setUniqueValues]);
 
 	const toggleSubject = (subject: Subject, semester: number) => {
@@ -434,42 +434,5 @@
 			<div>
 				<h3 className="text-lg font-medium text-gray-900 mb-2 flex items-center gap-2">
-					Година на студии
-					<span
-						className="relative group cursor-pointer"
-						tabIndex={0}
-						aria-label="Објаснување за година на студии"
-					>
-						<svg
-							xmlns="http://www.w3.org/2000/svg"
-							width="18"
-							height="18"
-							fill="currentColor"
-							viewBox="0 0 20 20"
-							className="text-gray-400"
-						>
-							<circle
-								cx="10"
-								cy="10"
-								r="9"
-								stroke="currentColor"
-								strokeWidth="2"
-								fill="none"
-							/>
-							<text
-								x="10"
-								y="15"
-								textAnchor="middle"
-								fontSize="13"
-								fill="currentColor"
-							>
-								?
-							</text>
-						</svg>
-						<span className="absolute left-1/2 -translate-x-1/2 mt-2 w-64 bg-gray-800 text-white text-xs rounded px-3 py-2 opacity-0 group-hover:opacity-100 group-focus:opacity-100 pointer-events-none transition-opacity z-10">
-							Ако моментално е јуни - септември, за да добиеш соодветни
-							препораки додади еден на твојата тековна година на студии. На
-							пример, ако си втора година и е јуни, избери дека си трета година.
-						</span>
-					</span>
+					Година за која сакаш препораки
 				</h3>
 				<select
Index: frontend/src/pages/Recommendations.tsx
===================================================================
--- frontend/src/pages/Recommendations.tsx	(revision d450857c320b2ac0b3ca98f976b373659ab4eb00)
+++ frontend/src/pages/Recommendations.tsx	(revision b18bbae21883ea04bd3d2e9d8f2a9af31cf2ba98)
@@ -5,7 +5,7 @@
 import { Subject } from "../components/types";
 import { useRecommendations } from "../context/RecommendationsContext";
-import useAxiosAuth from "../hooks/useAxiosAuth";
 import { useSubjects } from "../context/SubjectsContext";
 import { useAuth } from "../hooks/useAuth";
+import useAxiosAuth from "../hooks/useAxiosAuth";
 
 const Recommendations = () => {
@@ -98,5 +98,5 @@
 				return "Летен";
 			case "all":
-				return "Двата";
+				return "Зимски + Летен";
 		}
 	};
@@ -162,5 +162,5 @@
 									<h2 className="text-3xl font-bold text-gray-800 mb-2">
 										Вашите препораки за {getSeasonText().toLowerCase()}{" "}
-										{getSeasonText().toLowerCase() === "двата"
+										{getSeasonText().toLowerCase() === "Зимски + Летен"
 											? "семестри"
 											: "семестар"}
Index: frontend/src/pages/Register.tsx
===================================================================
--- frontend/src/pages/Register.tsx	(revision d450857c320b2ac0b3ca98f976b373659ab4eb00)
+++ frontend/src/pages/Register.tsx	(revision b18bbae21883ea04bd3d2e9d8f2a9af31cf2ba98)
@@ -2,7 +2,7 @@
 import React, { useState } from "react";
 import { Link, useNavigate } from "react-router-dom";
+import { toast } from "react-toastify";
 import PasswordInput from "../components/PasswordInput";
 import { useAuth } from "../hooks/useAuth";
-import { toast } from "react-toastify";
 
 interface RegisterForm {
@@ -101,5 +101,7 @@
 				/>
 				{errors.email && (
-					<p className="text-red-500 text-sm mb-2">Постои user со овој mail.</p>
+					<p className="text-red-500 text-sm mb-2">
+						Постои корисник со оваа адреса.
+					</p>
 				)}
 				<PasswordInput
@@ -108,5 +110,9 @@
 					onChange={handleChange}
 					placeholder="Лозинка"
-					error={errors.password ? "Пасвордот е прелесен. Треба да содржи барем 8 карактери и еден специјален знак." : undefined}
+					error={
+						errors.password
+							? "Лозинката е едноставна. Треба да содржи барем 8 карактери и еден специјален знак."
+							: undefined
+					}
 				/>
 				<PasswordInput
@@ -117,7 +123,5 @@
 				/>
 				{errors.confirmPassword && (
-					<p className="text-red-500 text-sm mb-2">
-						Лозинките не се совпаѓаат
-					</p>
+					<p className="text-red-500 text-sm mb-2">Лозинките не се совпаѓаат</p>
 				)}
 				<input
Index: frontend/src/pages/SubjectView.tsx
===================================================================
--- frontend/src/pages/SubjectView.tsx	(revision d450857c320b2ac0b3ca98f976b373659ab4eb00)
+++ frontend/src/pages/SubjectView.tsx	(revision b18bbae21883ea04bd3d2e9d8f2a9af31cf2ba98)
@@ -1,82 +1,90 @@
 import { ArrowLeft, Tag, Users } from "lucide-react";
-import { useEffect, useState, useMemo } from "react"; 
-import { useLocation, useNavigate, useParams } from "react-router-dom";
+import { useEffect, useMemo, useState } from "react";
+import { Link, useLocation, useNavigate, useParams } from "react-router-dom";
 import { getSubjectPrerequisites } from "../components/SubjectCatalog/utils";
 import SkeletonSubjectView from "../components/SubjectView/SkeletonSubjectView";
 import { EVALUATION_MAP_TO_MK } from "../constants/subjects";
-import { useSubjects } from "../context/SubjectsContext"; 
+import { useSubjects } from "../context/SubjectsContext";
 
 function SubjectView() {
-    const [subjectPrerequisites, setSubjectPrerequisites] = useState<
-        "Нема предуслов" | number | string
-    >("Нема предуслов");
-    const [isExpanded, setIsExpanded] = useState(false);
-    const [filteredTechonologies, setFilteredTechnologies] = useState<string[]>([]);
-    const { code } = useParams();
-    const navigate = useNavigate();
-    const location = useLocation();
-
-    const [subjects] = useSubjects();
-
-    // useMemo makes this efficient, so it only re-calculates when subjects or code changes.
-    const selectedSubject = useMemo(() => {
-        return subjects.find((subject) => subject.code === code);
-    }, [subjects, code]);
-
-    const WORD_LIMIT = 40;
-    const from = location.state?.from || "/";
-
-    const truncateText = (text: string) => {
-        if (!text) return "";
-        const words = text.split(/\s+/);
-        return words.length <= WORD_LIMIT
-            ? text
-            : words.slice(0, WORD_LIMIT).join(" ") + "...";
-    };
-
-    const abstractText = isExpanded
-        ? selectedSubject?.abstract
-        : truncateText(selectedSubject?.abstract ?? "");
-    
-    const canToggle =
-        selectedSubject &&
-        selectedSubject.abstract.split(/\s+/).length > WORD_LIMIT;
-
-    const handleGoBack = () => {
-        navigate(from);
-    };
-
-    useEffect(() => {
-        if (selectedSubject) {
-            const technologies = selectedSubject.subject_info.technologies.map(
-                (tech: string) => (tech === "any" ? "По избор" : tech)
-            );
-            const filtered = technologies.filter(
-                (tech: string) => tech !== "По избор"
-            );
-            if (technologies.includes("По избор")) {
-                filtered.push("По избор");
-            }
-            setFilteredTechnologies(filtered);
-            const subjectIdToNameMap = new Map(subjects.map(s => [s.id, s.name]));
-            setSubjectPrerequisites(
-                getSubjectPrerequisites(selectedSubject, subjectIdToNameMap)
-            );
-        }
-    }, [selectedSubject, subjects]); 
-
-    // We are "loading" if the global subjects context hasn't populated yet.
-    if (subjects.length === 0) {
-        return <SkeletonSubjectView />;
-    }
-
-    // Handle case where the subject code is not found in our global list
-    if (!selectedSubject) {
-        return (
-            <div className="flex items-center justify-center min-h-screen">
-                Предметот со код '{code}' не е пронајден.
-            </div>
-        );
-    }
+	const [subjectPrerequisites, setSubjectPrerequisites] = useState<
+		"Нема предуслов" | number | string
+	>("Нема предуслов");
+	const [isExpanded, setIsExpanded] = useState(false);
+	const [filteredTechonologies, setFilteredTechnologies] = useState<string[]>(
+		[]
+	);
+	const { code } = useParams();
+	const navigate = useNavigate();
+	const location = useLocation();
+
+	const [subjects] = useSubjects();
+
+	// useMemo makes this efficient, so it only re-calculates when subjects or code changes.
+	const selectedSubject = useMemo(() => {
+		return subjects.find((subject) => subject.code === code);
+	}, [subjects, code]);
+
+	const WORD_LIMIT = 40;
+	const from = location.state?.from || "/";
+
+	const truncateText = (text: string) => {
+		if (!text) return "";
+		const words = text.split(/\s+/);
+		return words.length <= WORD_LIMIT
+			? text
+			: words.slice(0, WORD_LIMIT).join(" ") + "...";
+	};
+
+	const abstractText = isExpanded
+		? selectedSubject?.abstract
+		: truncateText(selectedSubject?.abstract ?? "");
+
+	const canToggle =
+		selectedSubject &&
+		selectedSubject.abstract.split(/\s+/).length > WORD_LIMIT;
+
+	const handleGoBack = () => {
+		navigate(from);
+	};
+
+	useEffect(() => {
+		if (selectedSubject) {
+			const technologies = selectedSubject.subject_info.technologies.map(
+				(tech: string) => (tech === "any" ? "По избор" : tech)
+			);
+			const filtered = technologies.filter(
+				(tech: string) => tech !== "По избор"
+			);
+			if (technologies.includes("По избор")) {
+				filtered.push("По избор");
+			}
+			setFilteredTechnologies(filtered);
+			const subjectIdToNameMap = new Map(subjects.map((s) => [s.id, s.name]));
+			setSubjectPrerequisites(
+				getSubjectPrerequisites(selectedSubject, subjectIdToNameMap)
+			);
+		}
+	}, [selectedSubject, subjects]);
+
+	// We are "loading" if the global subjects context hasn't populated yet.
+	if (subjects.length === 0) {
+		return <SkeletonSubjectView />;
+	}
+
+	// Handle case where the subject code is not found in our global list
+	if (!selectedSubject) {
+		return (
+			<div className="flex flex-col items-center justify-center min-h-[85vh] bg-white text-center">
+				<p className="block">Предметот со код '{code}' не е пронајден.</p>
+				<p>
+					Не си сигурен кој е кодот на предметот? Најди го{" "}
+					<Link to="/subjects" className="text-blue-600 underline">
+						тука
+					</Link>
+				</p>
+			</div>
+		);
+	}
 
 	return (
