Index: backend/subjects/consts.py
===================================================================
--- backend/subjects/consts.py	(revision 8f179866a26b7365968f0fff5f192672bc20d82b)
+++ backend/subjects/consts.py	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -18,4 +18,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -38,4 +40,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -58,4 +62,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -78,4 +84,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -98,4 +106,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0
 	},
@@ -118,4 +128,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -138,4 +150,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -158,4 +172,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -178,4 +194,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0
 	},
@@ -198,4 +216,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -218,4 +238,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -238,4 +260,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -258,4 +282,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -278,4 +304,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0
 	},
@@ -298,4 +326,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0
 	},
@@ -318,4 +348,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -338,4 +370,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -358,4 +392,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -378,4 +414,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -398,4 +436,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -418,4 +458,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0
 	},
@@ -438,4 +480,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -458,4 +502,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -478,4 +524,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0
 	},
@@ -498,4 +546,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -518,4 +568,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -538,4 +590,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -558,4 +612,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -578,4 +634,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -598,4 +656,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -618,4 +678,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -638,4 +700,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -658,4 +722,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -678,4 +744,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -698,4 +766,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -718,4 +788,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -738,4 +810,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -758,4 +832,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -778,4 +854,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -798,4 +876,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0
 	},
@@ -818,4 +898,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -838,4 +920,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -858,4 +942,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -878,4 +964,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -898,4 +986,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -918,4 +1008,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -938,4 +1030,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -958,4 +1052,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -978,4 +1074,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -998,4 +1096,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -1018,4 +1118,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -1038,4 +1140,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0
 	},
@@ -1058,4 +1162,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0
 	},
@@ -1078,4 +1184,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -1098,4 +1206,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -1118,4 +1228,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -1138,4 +1250,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -1158,4 +1272,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1178,4 +1294,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1198,4 +1316,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1218,4 +1338,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -1238,4 +1360,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1258,4 +1382,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -1278,4 +1404,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1298,4 +1426,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1318,4 +1448,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1338,4 +1470,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -1358,4 +1492,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1378,4 +1514,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1398,4 +1536,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1418,4 +1558,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -1438,4 +1580,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1458,4 +1602,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1478,4 +1624,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1498,4 +1646,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1518,4 +1668,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -1538,4 +1690,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -1558,4 +1712,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -1578,4 +1734,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1598,4 +1756,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1618,4 +1778,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1638,4 +1800,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1658,4 +1822,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1678,4 +1844,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1698,4 +1866,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1718,4 +1888,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1738,4 +1910,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1758,4 +1932,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1778,4 +1954,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1798,4 +1976,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1818,4 +1998,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -1838,4 +2020,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1858,4 +2042,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -1878,4 +2064,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1898,4 +2086,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1918,4 +2108,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1938,4 +2130,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1958,4 +2152,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1978,4 +2174,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1998,4 +2196,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -2018,4 +2218,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -2038,4 +2240,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -2058,4 +2262,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -2078,4 +2284,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -2098,4 +2306,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -2118,4 +2328,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2138,4 +2350,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2158,4 +2372,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2178,4 +2394,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2198,4 +2416,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2218,4 +2438,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2238,4 +2460,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2258,4 +2482,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2278,4 +2504,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2298,4 +2526,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2318,4 +2548,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2338,4 +2570,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2358,4 +2592,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2378,4 +2614,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2398,4 +2636,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2418,4 +2658,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2438,4 +2680,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2458,4 +2702,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2478,4 +2724,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2498,4 +2746,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2518,4 +2768,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2538,4 +2790,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2558,4 +2812,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2578,4 +2834,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2598,4 +2856,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2618,4 +2878,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -2638,4 +2900,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2658,4 +2922,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2678,4 +2944,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2698,4 +2966,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 1
 	},
@@ -2718,4 +2988,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2738,4 +3010,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2758,4 +3032,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2778,4 +3054,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2798,4 +3076,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2818,4 +3098,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2838,4 +3120,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2858,4 +3142,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2878,4 +3164,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2898,4 +3186,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2918,4 +3208,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -2938,4 +3230,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2958,4 +3252,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2978,4 +3274,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -2998,4 +3296,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3018,4 +3318,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3038,4 +3340,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3058,4 +3362,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -3078,4 +3384,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 1
 	},
@@ -3098,4 +3406,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3118,4 +3428,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3138,4 +3450,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3158,4 +3472,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3178,4 +3494,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -3198,4 +3516,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -3218,4 +3538,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3238,4 +3560,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3258,4 +3582,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -3278,4 +3604,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3298,4 +3626,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 1
 	},
@@ -3318,4 +3648,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 1
 	},
@@ -3338,4 +3670,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -3358,4 +3692,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -3378,4 +3714,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -3398,4 +3736,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -3418,4 +3758,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3438,4 +3780,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3458,4 +3802,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3478,4 +3824,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 1,
+		"year": 1,
 		"participants": 0
 	},
@@ -3498,4 +3846,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	}
Index: backend/subjects/management/commands/subjects_vector.py
===================================================================
--- backend/subjects/management/commands/subjects_vector.py	(revision 8f179866a26b7365968f0fff5f192672bc20d82b)
+++ backend/subjects/management/commands/subjects_vector.py	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -1,2 +1,3 @@
+from math import ceil
 from pathlib import Path
 import json
@@ -21,5 +22,5 @@
         keys_to_extract = [
             "subject", "level", "activated", "participants", "semester",
-            "professors", "assistants", "tags", "technologies", "evaluation", "isEasy"
+            "professors", "assistants", "tags", "technologies", "evaluation", "isEasy", "season"
         ]
         subject_details = {}
@@ -52,6 +53,4 @@
 
 
-        # vocabulary = list(sorted(distinct_professors)) + list(sorted(distinct_assistants)) + list(sorted(distinct_technologies)) \
-            # + list(sorted(distinct_tags)) + list(sorted(distinct_evaluations)) + ['isEasy', 'activated', 'participants'] 
 
         distinct_professors = sorted(distinct_professors)
@@ -82,6 +81,4 @@
             subject_vector['evaluation'] = []
             subject_vector['technologies'] = []
-            if subject_name == "Дигитална форензика":
-                print(values['tags'])
             for word in distinct_professors:
                 subject_vector['professors'].append(0 if word not in values['professors'] else 1)
@@ -93,8 +90,11 @@
                 subject_vector['evaluation'].append(0 if word not in values['evaluation'] else 1)
             for word in distinct_technologies:
-                subject_vector['technolosgies'].append(0 if word not in values['technologies'] else 1)
-            
+                subject_vector['technologies'].append(0 if word not in values['technologies'] else 1)
+
             subject_vector['isEasy'] = 1 if values['isEasy'] else 0
             subject_vector['activated'] = 1 if values['activated'] else 0
+            # 0 - leten, 1 - zimski
+            subject_vector['season'] = 1 if values['season'] == 'W' else 0
+            subject_vector['year'] = ceil(values['semester'] / 2)
             participants = average(values['participants'])
             val = -1
Index: backend/subjects/management/data/subjects_vector.json
===================================================================
--- backend/subjects/management/data/subjects_vector.json	(revision 8f179866a26b7365968f0fff5f192672bc20d82b)
+++ backend/subjects/management/data/subjects_vector.json	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -18,4 +18,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -38,4 +40,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -58,4 +62,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -78,4 +84,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -98,4 +106,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0
 	},
@@ -118,4 +128,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -138,4 +150,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -158,4 +172,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -178,4 +194,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0
 	},
@@ -198,4 +216,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -218,4 +238,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -238,4 +260,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -258,4 +282,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0.5
 	},
@@ -278,4 +304,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0
 	},
@@ -298,4 +326,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 0
 	},
@@ -318,4 +348,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -338,4 +370,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -358,4 +392,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -378,4 +414,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -398,4 +436,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -418,4 +458,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0
 	},
@@ -438,4 +480,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -458,4 +502,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -478,4 +524,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 0
 	},
@@ -498,4 +546,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -518,4 +568,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -538,4 +590,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -558,4 +612,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -578,4 +634,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -598,4 +656,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -618,4 +678,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -638,4 +700,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -658,4 +722,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -678,4 +744,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -698,4 +766,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -718,4 +788,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -738,4 +810,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -758,4 +832,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -778,4 +854,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -798,4 +876,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0
 	},
@@ -818,4 +898,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -838,4 +920,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -858,4 +942,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -878,4 +964,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -898,4 +986,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -918,4 +1008,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -938,4 +1030,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -958,4 +1052,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -978,4 +1074,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -998,4 +1096,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -1018,4 +1118,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -1038,4 +1140,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0
 	},
@@ -1058,4 +1162,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0
 	},
@@ -1078,4 +1184,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 1
 	},
@@ -1098,4 +1206,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	},
@@ -1118,4 +1228,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -1138,4 +1250,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 1
 	},
@@ -1158,4 +1272,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1178,4 +1294,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1198,4 +1316,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1218,4 +1338,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -1238,4 +1360,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1258,4 +1382,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -1278,4 +1404,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1298,4 +1426,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1318,4 +1448,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1338,4 +1470,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -1358,4 +1492,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1378,4 +1514,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1398,4 +1536,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1418,4 +1558,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 1
 	},
@@ -1438,4 +1580,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1458,4 +1602,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1478,4 +1624,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1498,4 +1646,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1518,4 +1668,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -1538,4 +1690,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -1558,4 +1712,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -1578,4 +1734,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1598,4 +1756,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1618,4 +1778,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1638,4 +1800,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1658,4 +1822,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1678,4 +1844,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1698,4 +1866,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1718,4 +1888,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1738,4 +1910,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1758,4 +1932,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1778,4 +1954,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1798,4 +1976,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -1818,4 +1998,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -1838,4 +2020,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1858,4 +2042,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -1878,4 +2064,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1898,4 +2086,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1918,4 +2108,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1938,4 +2130,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -1958,4 +2152,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1978,4 +2174,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -1998,4 +2196,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -2018,4 +2218,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -2038,4 +2240,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 1
 	},
@@ -2058,4 +2262,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -2078,4 +2284,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -2098,4 +2306,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0.5
 	},
@@ -2118,4 +2328,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2138,4 +2350,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2158,4 +2372,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2178,4 +2394,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2198,4 +2416,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2218,4 +2438,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2238,4 +2460,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2258,4 +2482,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2278,4 +2504,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2298,4 +2526,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2318,4 +2548,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2338,4 +2570,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2358,4 +2592,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2378,4 +2614,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2398,4 +2636,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2418,4 +2658,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2438,4 +2680,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2458,4 +2702,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2478,4 +2724,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2498,4 +2746,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2518,4 +2768,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2538,4 +2790,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2558,4 +2812,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2578,4 +2834,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2598,4 +2856,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2618,4 +2878,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -2638,4 +2900,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2658,4 +2922,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2678,4 +2944,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2698,4 +2966,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 1
 	},
@@ -2718,4 +2988,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2738,4 +3010,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2758,4 +3032,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2778,4 +3054,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -2798,4 +3076,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2818,4 +3098,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2838,4 +3120,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2858,4 +3142,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2878,4 +3164,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2898,4 +3186,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -2918,4 +3208,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -2938,4 +3230,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2958,4 +3252,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -2978,4 +3274,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -2998,4 +3296,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3018,4 +3318,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3038,4 +3340,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3058,4 +3362,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -3078,4 +3384,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 1
 	},
@@ -3098,4 +3406,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3118,4 +3428,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3138,4 +3450,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3158,4 +3472,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3178,4 +3494,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0.5
 	},
@@ -3198,4 +3516,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 3,
 		"participants": 0
 	},
@@ -3218,4 +3538,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3238,4 +3560,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3258,4 +3582,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 3,
 		"participants": 0
 	},
@@ -3278,4 +3604,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3298,4 +3626,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 1
 	},
@@ -3318,4 +3648,6 @@
 		"isEasy": 1,
 		"activated": 1,
+		"season": 0,
+		"year": 4,
 		"participants": 1
 	},
@@ -3338,4 +3670,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -3358,4 +3692,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 2,
 		"participants": 0.5
 	},
@@ -3378,4 +3714,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 1,
 		"participants": 1
 	},
@@ -3398,4 +3736,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 0,
+		"year": 1,
 		"participants": 1
 	},
@@ -3418,4 +3758,6 @@
 		"isEasy": 0,
 		"activated": 1,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3438,4 +3780,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 1,
+		"year": 4,
 		"participants": 0
 	},
@@ -3458,4 +3802,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 4,
 		"participants": 0
 	},
@@ -3478,4 +3824,6 @@
 		"isEasy": 1,
 		"activated": 0,
+		"season": 1,
+		"year": 1,
 		"participants": 0
 	},
@@ -3498,4 +3846,6 @@
 		"isEasy": 0,
 		"activated": 0,
+		"season": 0,
+		"year": 2,
 		"participants": 0
 	}
Index: backend/subjects/subject_dependencies.py
===================================================================
--- backend/subjects/subject_dependencies.py	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
+++ backend/subjects/subject_dependencies.py	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -0,0 +1,89 @@
+import json
+
+TAGS = [
+    "AI / ML",
+    "Cloud Engineering & DevOps",
+    "Computer Architecture",
+    "Computer Science",
+    "Cybersecurity",
+    "Data Science",
+    "Databases",
+    "Education",
+    "Embedded Systems",
+    "Game Development",
+    "Mathematics",
+    "Multimedia",
+    "Networking",
+    "Physics",
+    "Societal Skills",
+    "Software Engineering",
+    "Systems Infrastructure",
+    "UI/UX & Digital Media",
+    "Web Development"
+]
+
+EDGES = [
+    ("Mathematics", "Physics"),
+    ("Web Development", "Databases"),
+    ("Databases", "AI / ML"),
+    ("Data Science", "AI / ML"),
+    ("Cybersecurity", "Systems Infrastructure"),
+    ("Computer Architecture", "Systems Infrastructure"),
+    ("Game Development", "Embedded Systems"),
+    ("Cloud Engineering & DevOps", "Networking"),
+    ("Computer Science", "Mathematics"),
+    ("Computer Science", "Physics"),
+    ("Computer Architecture", "Networking"),
+    ("Computer Architecture", "Computer Science"),
+    ("UI/UX & Digital Media", "Multimedia"),
+    ("Societal Skills", "Education"),
+    ("Web Development", "Cloud Engineering & DevOps"),
+    ("Game Development", "Mathematics"),
+    ("Game Development", "Physics"),
+    ("Web Development", "UI/UX & Digital Media"),
+    ("Cybersecurity", "Networking"),
+    ("Cybersecurity", "Computer Architecture"),
+    ("AI / ML", "Mathematics"),
+    ("Data Science", "Mathematics")
+]
+
+def add(tag1, tag2):
+    tag_graph[tag1].append(tag2)
+    tag_graph[tag2].append(tag1)
+
+tag_graph = {}
+for tag in TAGS:
+    tag_graph[tag] = []
+
+for edge in EDGES:
+    add(edge[0], edge[1])
+
+tag_to_col_index = {}
+
+for i, tag in enumerate(TAGS):
+    tag_to_col_index[tag] = i
+
+final_tag_graph = {}
+
+for key in tag_graph.keys():
+    key_index = tag_to_col_index[key]
+    
+    for i, val in enumerate(tag_graph[key]):
+        tag_graph[key][i] = tag_to_col_index[val]
+    
+    final_tag_graph[key_index] = tag_graph[key]
+
+
+
+with open("tag_graph.json", "w") as f:
+    json.dump(final_tag_graph, f)
+
+
+
+
+
+
+
+
+
+
Index: backend/subjects/tag_graph.json
===================================================================
--- backend/subjects/tag_graph.json	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
+++ backend/subjects/tag_graph.json	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -0,0 +1,21 @@
+{
+	"0": [6, 5, 10],
+	"1": [12, 18],
+	"2": [16, 12, 3, 4],
+	"3": [10, 13, 2],
+	"4": [16, 12, 2],
+	"5": [0, 10],
+	"6": [18, 0],
+	"7": [14],
+	"8": [9],
+	"9": [8, 10, 13],
+	"10": [13, 3, 9, 0, 5],
+	"11": [17],
+	"12": [1, 2, 4],
+	"13": [10, 3, 9],
+	"14": [7],
+	"15": [],
+	"16": [4, 2],
+	"17": [11, 18],
+	"18": [6, 1, 17]
+}
Index: backend/subjects/utils.py
===================================================================
--- backend/subjects/utils.py	(revision 8f179866a26b7365968f0fff5f192672bc20d82b)
+++ backend/subjects/utils.py	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -5,11 +5,17 @@
 import json
 from numpy import average
+from django.db.models import Q
+import os
 
-def get_eligible_subjects(student):
+def get_eligible_subjects(student, season = 2):
+    """
+    season -  0 - summer, 1 - winter, 2 - all
+    """
     passed_ids = set(student.passed_subjects.values_list('id', flat=True))
-
     total_credits = student.total_credits
     level_credits = student.level_credits
     study_track = student.study_track
+    study_effort = student.study_effort
+    current_year = student.current_year
 
     all_subjects = (Subject.objects
@@ -17,4 +23,19 @@
         .select_related('subject_info')
     )
+    if season != 2:
+        if season == 0:
+            all_subjects = all_subjects.exclude(subject_info__season='W')
+        elif season == 1:
+            all_subjects = all_subjects.exclude(subject_info__season='S')
+
+    if study_effort < 3:
+        all_subjects = all_subjects.exclude(subject_info__semester__gt=current_year * 2)
+    elif study_effort == 3:
+        all_subjects = all_subjects.filter(
+            Q(subject_info__semester=current_year * 2) |
+            Q(subject_info__semester=current_year * 2 - 1)
+        )
+    else:
+        all_subjects = all_subjects.filter(subject_info__semester__gte=current_year * 2)
 
     if level_credits[0] >= 6:
@@ -72,8 +93,36 @@
     
     return filtered_subject_vectors
+
+def score_tags(student_vector, subject_vector):
+    TAG_GRAPH_PATH = os.path.join(os.path.dirname(__file__), 'tag_graph.json')
+
+    with open(TAG_GRAPH_PATH, 'r', encoding='utf-8') as f:
+        tag_graph = json.load(f)
+
+    student_tags = student_vector['tags']
+    subject_tags = subject_vector['tags']
+    score = 0
+    tot_count = 0
+    BIAS_SUBJECT_HAS_ONE = 0.75
+    BIAS_STUDENT_HAS_ONE = 0.9
+    for i in range(len(student_tags)):
+        if student_tags[i] == 1 or subject_tags[i] == 1: tot_count += 1
+        
+        if student_tags[i] == subject_tags[i]: 
+            if student_tags[i] == 1:
+                score += 1
+        else:
+            neighbors = tag_graph[str(i)]
+            if student_tags[i] == 1:
+                for neighbor in neighbors:
+                    if subject_tags[neighbor] == 1: score += 1 / len(neighbors) * BIAS_STUDENT_HAS_ONE
+            else:
+                for neighbor in neighbors:
+                    if student_tags[neighbor] == 1: score += 1 / len(neighbors) * BIAS_SUBJECT_HAS_ONE
     
+    return score / tot_count
 
 def score_for_preferences(student_vector, eligible_subjects):
-    K = 1
+    # K = 1
     filtered_subjects_vector = {}
     for subject in eligible_subjects:
@@ -82,11 +131,12 @@
         for key in student_vector:
             if key in ["index", "study_effort", "current_year"]: continue
+            # if key == "tags":
+            #     filtered_subjects_vector[subject][key] = score_tags(student_vector, values)
+            #     continue
+
             student_values = student_vector[key]
             subject_values = values[key]
             tot_count = 0
             match_count = 0
-            if key == "tags" and subject == "Дигитална форензика":
-                print(student_values)
-                print(subject_values)
 
             for i in range(len(student_values)):
@@ -95,4 +145,5 @@
                     if subject_values[i] == 1:
                         match_count += 1
+            
             
             # score = (match_count + K) / (tot_count + K * len(student_values))
@@ -103,19 +154,20 @@
         # current_year = student_vector["current_year"]
 
-        # TODO: add something for people who want to study more!
-        filtered_subjects_vector[subject]['easiness'] = (1 - study_effort) * values['isEasy']
+        filtered_subjects_vector[subject]['effort'] = (1 - study_effort) * values['isEasy'] # 0 0.2 0.4 0.6 0.8 1
         filtered_subjects_vector[subject]['activated'] = values['activated']
         filtered_subjects_vector[subject]['participant_score'] = values['participants']
+
+
 
     return filtered_subjects_vector
 
 WEIGHTS = {
-    "professors": 0.05,
-    "technologies": 0.05,
-    "tags": 0.4,
+    "professors": 0.02,
+    "technologies": 0.02,
+    "tags": 0.55,
     "evaluation": 0.1, 
-    "easiness": 0.3,
-    "activated": 1,
-    "participant_score": 0.1,
+    "effort": 0.3,
+    "activated": 0,
+    "participant_score": 0.01,
 }
 
@@ -128,5 +180,4 @@
         for key in keys:
             score += WEIGHTS[key] * keys[key]
-        
         max_ = max(score, max_)
         subject_scores[subject] = score
@@ -138,4 +189,4 @@
 
     N = 7
-    top_subjects = dict(sorted(subject_scores.items(), key=lambda item: item[1], reverse=True))
+    top_subjects = list(dict(sorted(subject_scores.items(), key=lambda item: item[1], reverse=True)))[:N]
     return top_subjects
Index: backend/subjects/views.py
===================================================================
--- backend/subjects/views.py	(revision 8f179866a26b7365968f0fff5f192672bc20d82b)
+++ backend/subjects/views.py	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -6,9 +6,10 @@
 from rest_framework.response import Response
 from rest_framework import status
-
+from django.db.models import Case, When
 from auth_form.serializers import StudentFormSerializer
 from subjects.utils import get_eligible_subjects, get_recommendations, map_to_subjects_vector, score_for_preferences, student_vector
 from .serializers import SubjectSerializer
 from .models import Subject_Info, Subject
+from datetime import datetime
 
 def index(request):
@@ -17,5 +18,5 @@
 
 @api_view(['GET'])
-def subject_view(reuest, pk):
+def subject_view(request, pk):
     subject = Subject.objects.get(pk=pk)
     serializer = SubjectSerializer(subject)
@@ -30,9 +31,16 @@
 @api_view(['GET'])
 def get_suggestions(request):
+    season = request.query_params.get('season')
+    if not season: season = 2
+    try:
+        season = int(season)
+    except ValueError:
+        return Response({"message": "Invalid season"}, status=status.HTTP_400_BAD_REQUEST)
+    
     student = request.user.student
     if not student:
         return Response({"message": "Could not find student"}, status=status.HTTP_400_BAD_REQUEST)
 
-    subjects = get_eligible_subjects(student)
+    subjects = get_eligible_subjects(student, season=season)
     mapped_subjects = map_to_subjects_vector(subjects)
     vector = student_vector(student)
@@ -40,8 +48,9 @@
     final_subjects = get_recommendations(score_for_preferences(vector, mapped_subjects))
 
-    # subject_dict = {subject.name: subject for subject in Subject.objects.filter(name__in=final_subjects)}
-    # sorted_subjects = [subject_dict[name] for name in final_subjects if name in subject_dict]  
+    order = Case(*[When(name=subject_name, then=pos) for pos, subject_name in enumerate(final_subjects)])
 
-    # serializer = SubjectSerializer(sorted_subjects, many=True)
-    return Response({"data": final_subjects}, status=status.HTTP_200_OK)
+    recommended_subject_objects = Subject.objects.filter(name__in=final_subjects).order_by(order)
 
+    serializer = SubjectSerializer(recommended_subject_objects, many=True)
+    return Response({"data": serializer.data}, status=status.HTTP_200_OK)
+
Index: frontend/src/components/StudentForm/StudentForm.tsx
===================================================================
--- frontend/src/components/StudentForm/StudentForm.tsx	(revision 8f179866a26b7365968f0fff5f192672bc20d82b)
+++ frontend/src/components/StudentForm/StudentForm.tsx	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -379,6 +379,41 @@
 			</div>
 			<div>
-				<h3 className="text-lg font-medium text-gray-900 mb-2">
+				<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">
+							TODO
+						</span>
+					</span>
 				</h3>
 				<select
Index: frontend/src/pages/Recommendations.tsx
===================================================================
--- frontend/src/pages/Recommendations.tsx	(revision 8f179866a26b7365968f0fff5f192672bc20d82b)
+++ frontend/src/pages/Recommendations.tsx	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -1,34 +1,222 @@
 import { useState } from "react";
+import { useNavigate } from "react-router-dom";
 import { Subject } from "../components/types";
 import useAxiosAuth from "../hooks/useAxiosAuth";
 
 const Recommendations = () => {
-	const axiosAuth  = useAxiosAuth();
+	const axiosAuth = useAxiosAuth();
+	const navigate = useNavigate();
 	const [recommendations, setRecommendations] = useState<Subject[]>([]);
+	const [season_, setSeason] = useState<"winter" | "summer" | "all">("all");
+	const [isLoading, setIsLoading] = useState(false);
+
+	const mapToSeasonInt = (season: "winter" | "summer" | "all") => {
+		if (season == "summer") return 0;
+		if (season == "winter") return 1;
+		return 2;
+	};
+
 	const testAPI = async () => {
+		setIsLoading(true);
 		try {
-			const response = await axiosAuth.get("/suggestion");
+			const season = mapToSeasonInt(season_);
+			console.log(season);
+			const response = await axiosAuth.get("/suggestion", {
+				params: { season },
+			});
 			setRecommendations(response.data.data);
+			console.log(response.data.data);
+			console.log(response.data);
+		} catch (error) {
+			console.error("Error fetching recommendations:", error);
+		} finally {
+			setIsLoading(false);
 		}
-		catch (error) {
-			console.error("Error fetching recommendations:", error);
+	};
+
+	const cycleSeason = () => {
+		if (season_ === "all") setSeason("winter");
+		else if (season_ === "winter") setSeason("summer");
+		else setSeason("all");
+	};
+
+	const openSubjectView = (subject: Subject) => {
+		navigate(`/subjects/${subject.id}`, {
+			state: { from: "/recommendations" },
+		});
+	};
+
+	const openSubjectDetails = (subject: Subject) => {
+		console.log("Opening subject details for:", subject);
+	};
+
+	const getSeasonText = () => {
+		switch (season_) {
+			case "winter":
+				return "Зимски";
+			case "summer":
+				return "Летен";
+			case "all":
+				return "Сите";
 		}
 	};
 
 	return (
-		<div className="ml-2">
-			<p>zdravo klikni na kopcevo besplatno e</p>
-			<button className="bg-red-500 p-2 rounded" onClick={testAPI}>
-				test api
-			</button>
-			<div>
-				{recommendations &&
-					Object.entries(recommendations).map(([key, value]) => (
-						<div key={key}>
-							<p>
-								<strong>{key}:</strong> {String(value)}
-							</p>
+		<div className="flex h-screen bg-gray-50">
+			{/* Left Panel - Controls */}
+			<div className="w-1/3 bg-white shadow-lg p-8 flex flex-col justify-center items-center space-y-8">
+				<div className="text-center">
+					<h1 className="text-4xl font-bold text-gray-800 mb-2">Препораки</h1>
+					<p className="text-gray-600 text-lg">
+						Откријте ги вашите идеални предмети!
+					</p>
+				</div>
+
+				<div className="bg-blue-50 border border-blue-200 rounded-lg p-6 text-center hover:bg-blue-100 transition-colors duration-200">
+					<p className="text-gray-700 mb-3">Избрана сезона:</p>
+					<p className="text-2xl font-semibold text-gray-800">
+						{getSeasonText()}
+					</p>
+				</div>
+
+				<button
+					onClick={cycleSeason}
+					className="bg-blue-500 hover:bg-blue-600 text-white px-8 py-4 rounded-lg text-lg font-medium hover:scale-105 transition-all duration-200 shadow-md hover:shadow-lg"
+				>
+					Промени сезона
+				</button>
+
+				<button
+					onClick={testAPI}
+					disabled={isLoading}
+					className={`${
+						isLoading
+							? "bg-gray-400 cursor-not-allowed"
+							: "bg-green-500 hover:bg-green-600 hover:scale-105 shadow-md hover:shadow-lg"
+					} text-white px-8 py-4 rounded-lg text-xl font-bold transition-all duration-200 flex items-center space-x-2`}
+				>
+					{isLoading ? (
+						<>
+							<div className="animate-spin rounded-full h-5 w-5 border-b-2 border-white"></div>
+							<span>Се вчитува...</span>
+						</>
+					) : (
+						<span>Вчитај препораки!</span>
+					)}
+				</button>
+			</div>
+
+			{/* Right Panel - Results */}
+			<div className="flex-1 p-8 overflow-y-auto">
+				{recommendations.length > 0 ? (
+					<div className="space-y-6">
+						<div className="text-center mb-8">
+							<h2 className="text-3xl font-bold text-gray-800 mb-2">
+								Вашите препораки за {getSeasonText().toLowerCase()} семестар
+							</h2>
+							<div className="w-24 h-1 bg-blue-500 mx-auto rounded-full"></div>
 						</div>
-					))}
+
+						<div className="grid grid-cols-1 lg:grid-cols-2 gap-6 lg:h-[1100px]">
+							{recommendations.map((subject, index) => (
+								<div
+									key={subject.id}
+									className={`border border-gray-200 rounded-lg overflow-hidden shadow-sm hover:shadow-md transition-shadow duration-200 relative ${
+										index % 2 === 0 ? "self-start" : "self-end"
+									}`}
+									style={{
+										height: "80%",
+										animationDelay: `${index * 100}ms`,
+										animation: "fadeInUp 0.6s ease-out forwards",
+									}}
+								>
+									{/* <span className="absolute top-3 right-3 bg-blue-500 text-white text-xs font-bold px-2 py-1 rounded-full min-w-[20px] text-center">
+										{index + 1}
+									</span> */}
+									<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>
+
+										{subject.subject_info?.tags && (
+											<div className="flex flex-wrap gap-2 mb-4">
+												{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-between mt-auto gap-3">
+											<button
+												onClick={() => openSubjectDetails(subject)}
+												className="flex items-center text-sm text-gray-600 hover:text-gray-800 transition-colors"
+											>
+												<img
+													src="src/assets/eye.svg"
+													className="w-4 h-4 mr-1"
+												/>
+												Брз преглед
+											</button>
+											<button
+												onClick={() => openSubjectView(subject)}
+												className="flex items-center px-3 py-2 bg-gray-700 hover:bg-gray-900 text-white text-sm font-medium rounded-md transition-colors"
+											>
+												<svg
+													className="w-4 h-4 mr-1"
+													fill="none"
+													stroke="currentColor"
+													viewBox="0 0 24 24"
+												>
+													<path
+														strokeLinecap="round"
+														strokeLinejoin="round"
+														strokeWidth={2}
+														d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
+													/>
+												</svg>
+												Отвори предмет
+											</button>
+										</div>
+									</div>
+								</div>
+							))}
+						</div>
+					</div>
+				) : (
+					<div className="flex flex-col items-center justify-center h-full text-center">
+						<div className="text-gray-400 mb-6">
+							<svg
+								className="w-16 h-16 mx-auto"
+								fill="none"
+								stroke="currentColor"
+								viewBox="0 0 24 24"
+							>
+								<path
+									strokeLinecap="round"
+									strokeLinejoin="round"
+									strokeWidth={1}
+									d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
+								/>
+							</svg>
+						</div>
+						<h3 className="text-2xl font-bold text-gray-600 mb-4">
+							Започнете со пребарување!
+						</h3>
+						<p className="text-gray-500 text-lg max-w-md">
+							Изберете ја саканата сезона и кликнете на "Вчитај препораки" за да
+							ги откриете вашите идеални предмети!
+						</p>
+					</div>
+				)}
 			</div>
 		</div>
Index: frontend/src/pages/SubjectView.tsx
===================================================================
--- frontend/src/pages/SubjectView.tsx	(revision 8f179866a26b7365968f0fff5f192672bc20d82b)
+++ frontend/src/pages/SubjectView.tsx	(revision 869afef3ce1015f9e44d2185d5596369ab56e79a)
@@ -310,5 +310,7 @@
 					<div className="space-y-6">
 						<div className="bg-white rounded-lg shadow-sm p-6">
-							<h2 className="text-xl font-semibold mb-6">Некој текст</h2>
+							<h2 className="text-xl font-semibold mb-6">
+								Информации за предметот
+							</h2>
 							<div className="space-y-4">
 								<div>
