Index: reactapp/src/Pages/Faculty.js
===================================================================
--- reactapp/src/Pages/Faculty.js	(revision 8d831804abcee99d72c207c57a8f16e54b1329a2)
+++ reactapp/src/Pages/Faculty.js	(revision 8d831804abcee99d72c207c57a8f16e54b1329a2)
@@ -0,0 +1,235 @@
+import React, { useState, useEffect } from "react";
+import { useParams, Outlet } from "react-router-dom";
+import JSOG from "jsog";
+import {
+  ProfessorCard,
+  ProfessorCardName,
+  ProfessorCardSeparator,
+  ProfessorCardDetails,
+} from "../Components/Styled/ProfessorCard.style";
+import {
+  EntityUl,
+  EntityLi,
+  EntityParam,
+  EntityTypeSelector,
+} from "../Components/Styled/EntityList.style";
+import SubjectsAccordion from "../Components/SubjectsAccordion";
+import { CurrentPageNav } from "../Components/Styled/Main.style";
+
+const Faculty = () => {
+  let params = useParams();
+  const [loadedProfessors, setLoadedProfessors] = useState(false);
+  const [loadedStudyProgrammes, setLoadedStudyProgrammes] = useState(false);
+  const [professors, setProfessors] = useState(null);
+  const [studyProgrammes, setStudyProgrammes] = useState(null);
+  const [fetchError, setFetchError] = useState(false);
+  const [entityType, setEntityType] = useState(0);
+
+  useEffect(() => {
+    const urlProfessors = `http://192.168.0.17:8080/public/professors?facultyId=${params.facultyId}`;
+    const urlStudyProgrammes = `http://192.168.0.17:8080/public/study_programmes?facultyId=${params.facultyId}`;
+
+    const fetchDataProfessors = async () => {
+      try {
+        const response = await fetch(urlProfessors);
+        let cyclicGraph = await response.json();
+        let jsogStructure = JSOG.encode(cyclicGraph);
+        cyclicGraph = JSOG.decode(jsogStructure);
+        setProfessors(cyclicGraph);
+        setLoadedProfessors(true);
+      } catch (error) {
+        setFetchError(true);
+      }
+    };
+
+    const fetchDataStudyProgrammes = async () => {
+      try {
+        const response2 = await fetch(urlStudyProgrammes);
+        let cyclicGraph2 = await response2.json();
+        let jsogStructure2 = JSOG.encode(cyclicGraph2);
+        cyclicGraph2 = JSOG.decode(jsogStructure2);
+        setStudyProgrammes(cyclicGraph2);
+        setLoadedStudyProgrammes(true);
+      } catch (error) {
+        setFetchError(true);
+      }
+    };
+
+    fetchDataProfessors();
+    fetchDataStudyProgrammes();
+  }, [params.facultyId]);
+
+  return loadedProfessors ? (
+    entityType === 0 ? (
+      <>
+        <CurrentPageNav>
+          &#187;{" "}
+          <a
+            href={
+              "/university/" + professors[0].faculty.university.universityId
+            }
+          >
+            {professors[0].faculty.university.universityName}
+          </a>{" "}
+          &#187; <a href="#">{professors[0].faculty.facultyName}</a>
+        </CurrentPageNav>
+        <ProfessorCard>
+          <ProfessorCardName>
+            {professors[0].faculty.facultyName}
+          </ProfessorCardName>
+          <ProfessorCardSeparator />
+          <ProfessorCardDetails fontSize="20px">
+            {professors[0].faculty.university.universityName}
+          </ProfessorCardDetails>
+        </ProfessorCard>
+        <div style={{ display: "flex" }}>
+          <EntityTypeSelector
+            backgroundcolor="rgba(0, 102, 204, 1)"
+            color="white"
+            boxshadow="none"
+            boxshadowhover="none"
+            opacityhover="0.6"
+            cursor="auto"
+          >
+            Прикажи професори
+          </EntityTypeSelector>
+          <EntityTypeSelector
+            boxshadow="2px 2px 5px #aaaaaa"
+            cursor="pointer"
+            boxshadowhover="2px 2px 10px #aaaaaa"
+            opacityhover="1"
+            onClick={() => setEntityType(1)}
+          >
+            Прикажи предмети
+          </EntityTypeSelector>
+        </div>
+        <div key={params.facultyId}>
+          {professors.map((professor) => {
+            let totalPosts = professor.relatedOpinions.length;
+
+            return (
+              <EntityUl key={professor.professorId}>
+                <EntityLi bgcolor="cornsilk">
+                  <a href={"/professor/" + professor.professorId}>
+                    {professor.professorName}
+                  </a>
+                  <EntityParam>
+                    {totalPosts !== 1 ? (
+                      totalPosts !== 0 ? (
+                        <span
+                          style={{
+                            fontWeight: "normal",
+                            opacity: totalPosts === 0 ? "0.5" : "1",
+                          }}
+                        >
+                          <span
+                            style={{
+                              fontWeight: "bold",
+                              opacity: totalPosts === 0 ? "0.5" : "1",
+                            }}
+                          >
+                            {totalPosts}
+                          </span>{" "}
+                          мислења
+                        </span>
+                      ) : (
+                        <span
+                          style={{
+                            fontWeight: "normal",
+                            opacity: totalPosts === 0 ? "0.5" : "1",
+                          }}
+                        >
+                          <span
+                            style={{
+                              fontWeight: "bold",
+                              opacity: totalPosts === 0 ? "0.5" : "1",
+                            }}
+                          >
+                            {totalPosts}
+                          </span>{" "}
+                          мислења
+                        </span>
+                      )
+                    ) : (
+                      <span style={{ fontWeight: "normal" }}>
+                        <span style={{ fontWeight: "bold" }}>{totalPosts}</span>{" "}
+                        мислење
+                      </span>
+                    )}
+                  </EntityParam>
+                </EntityLi>
+              </EntityUl>
+            );
+          })}
+        </div>
+      </>
+    ) : (
+      loadedStudyProgrammes && (
+        <>
+          <CurrentPageNav>
+            <a
+              href={
+                "/university/" + professors[0].faculty.university.universityId
+              }
+            >
+              {professors[0].faculty.university.universityName}
+            </a>{" "}
+            / <a href="#">{professors[0].faculty.facultyName}</a>
+          </CurrentPageNav>
+          <ProfessorCard>
+            <ProfessorCardName>
+              {professors[0].faculty.facultyName}
+            </ProfessorCardName>
+            <ProfessorCardSeparator />
+            <ProfessorCardDetails fontSize="20px">
+              {professors[0].faculty.university.universityName}
+            </ProfessorCardDetails>
+          </ProfessorCard>
+          <div style={{ display: "flex" }}>
+            <EntityTypeSelector
+              boxshadow="2px 2px 5px #aaaaaa"
+              cursor="pointer"
+              boxshadowhover="2px 2px 10px #aaaaaa"
+              opacityhover="1"
+              onClick={() => setEntityType(0)}
+            >
+              Прикажи професори
+            </EntityTypeSelector>
+            <EntityTypeSelector
+              backgroundcolor="rgba(0, 102, 204, 1)"
+              color="white"
+              boxshadow="none"
+              boxshadowhover="none"
+              opacityhover="0.6"
+              cursor="auto"
+            >
+              Прикажи предмети
+            </EntityTypeSelector>
+          </div>
+          <div key={params.facultyId}>
+            {studyProgrammes.map((studyProgramme) => {
+              return (
+                <SubjectsAccordion
+                  key={studyProgramme.studyProgrammeId}
+                  title={studyProgramme}
+                  content={studyProgramme.subjects}
+                ></SubjectsAccordion>
+              );
+            })}
+          </div>
+        </>
+      )
+    )
+  ) : !fetchError ? (
+    <div>
+      <p style={{ marginTop: "140px" }}>се вчитува...</p>
+      <Outlet />
+    </div>
+  ) : (
+    <div style={{ marginTop: "140px" }}>
+      <h1 style={{ textAlign: "center" }}>Страницата не е пронајдена.</h1>
+    </div>
+  );
+};
+
+export default Faculty;
Index: reactapp/src/Pages/NotFound.js
===================================================================
--- reactapp/src/Pages/NotFound.js	(revision 8d831804abcee99d72c207c57a8f16e54b1329a2)
+++ reactapp/src/Pages/NotFound.js	(revision 8d831804abcee99d72c207c57a8f16e54b1329a2)
@@ -0,0 +1,23 @@
+import React from "react";
+import { MainWrapper } from "../Components/Styled/Main.style";
+import { MainTitle } from "../Components/Styled/Main.style";
+
+const NotFound = () => {
+  return (
+    <MainWrapper>
+      <style>
+        {
+          "body { background-color: papayawhip;} * {margin: 0; padding: 0; box-sizing: border-box;}"
+        }
+      </style>
+      <a href="/">
+        <MainTitle>profesori.mk</MainTitle>
+      </a>{" "}
+      <div style={{ marginTop: "140px" }}>
+        <h1 style={{ textAlign: "center" }}>Страницата не е пронајдена.</h1>
+      </div>
+    </MainWrapper>
+  );
+};
+
+export default NotFound;
Index: reactapp/src/Pages/Professor.js
===================================================================
--- reactapp/src/Pages/Professor.js	(revision cae16b5c1413e5ea9894a407fe51545353de6dcc)
+++ reactapp/src/Pages/Professor.js	(revision 8d831804abcee99d72c207c57a8f16e54b1329a2)
@@ -23,4 +23,5 @@
 import { useNavigate } from "react-router-dom";
 import axios from "../api/axios";
+import { CurrentPageNav } from "../Components/Styled/Main.style";
 
 function Professor(user, userLoaded) {
@@ -34,4 +35,5 @@
   const [postTitle, setPostTitle] = useState("");
   const [postContent, setPostContent] = useState("");
+  const [fetchError, setFetchError] = useState(false);
 
   useEffect(() => {
@@ -47,5 +49,5 @@
         setLoaded(true);
       } catch (error) {
-        console.log("Fetching error", error);
+        setFetchError(true);
       }
     };
@@ -95,4 +97,15 @@
     return (
       <div>
+        <CurrentPageNav>
+          &#187;{" "}
+          <a href={"/university/" + professor.faculty.university.universityId}>
+            {professor.faculty.university.universityName}
+          </a>{" "}
+          &#187;{" "}
+          <a href={"/faculty/" + professor.faculty.facultyId}>
+            {professor.faculty.facultyName}
+          </a>{" "}
+          &#187; <a href="#">{professor.professorName}</a>
+        </CurrentPageNav>
         <ProfessorCard>
           <ProfessorCardName>{professor.professorName}</ProfessorCardName>
@@ -168,5 +181,5 @@
       </div>
     );
-  } else {
+  } else if (!fetchError) {
     return (
       <div>
@@ -175,4 +188,10 @@
       </div>
     );
+  } else {
+    return (
+      <div style={{ marginTop: "140px" }}>
+        <h1 style={{ textAlign: "center" }}>Страницата не е пронајдена.</h1>
+      </div>
+    );
   }
 }
Index: reactapp/src/Pages/Subject.js
===================================================================
--- reactapp/src/Pages/Subject.js	(revision 8d831804abcee99d72c207c57a8f16e54b1329a2)
+++ reactapp/src/Pages/Subject.js	(revision 8d831804abcee99d72c207c57a8f16e54b1329a2)
@@ -0,0 +1,9 @@
+import React from "react";
+import { useParams } from "react-router-dom";
+
+const Subject = () => {
+  let params = useParams();
+  return <div>Subject {params.subjectId}</div>;
+};
+
+export default Subject;
Index: reactapp/src/Pages/University.js
===================================================================
--- reactapp/src/Pages/University.js	(revision 8d831804abcee99d72c207c57a8f16e54b1329a2)
+++ reactapp/src/Pages/University.js	(revision 8d831804abcee99d72c207c57a8f16e54b1329a2)
@@ -0,0 +1,117 @@
+import React, { useState, useEffect } from "react";
+import { useParams, Outlet } from "react-router-dom";
+import JSOG from "jsog";
+import {
+  ProfessorCard,
+  ProfessorCardName,
+  ProfessorCardSeparator,
+  ProfessorCardDetails,
+} from "../Components/Styled/ProfessorCard.style";
+import {
+  EntityUl,
+  EntityLi,
+  EntityParam,
+} from "../Components/Styled/EntityList.style";
+import { CurrentPageNav } from "../Components/Styled/Main.style";
+
+const University = () => {
+  let params = useParams();
+  const [loaded, setLoaded] = useState(false);
+  const [faculties, setFaculties] = useState(false);
+  const [fetchError, setFetchError] = useState(false);
+
+  useEffect(() => {
+    const url = `http://192.168.0.17:8080/public/faculties?universityId=${params.universityId}`;
+
+    const fetchData = async () => {
+      try {
+        const response = await fetch(url);
+        var cyclicGraph = await response.json();
+        var jsogStructure = JSOG.encode(cyclicGraph);
+        cyclicGraph = JSOG.decode(jsogStructure);
+        setFaculties(cyclicGraph);
+        setLoaded(true);
+      } catch (error) {
+        setFetchError(true);
+      }
+    };
+    fetchData();
+  }, [params.universityId]);
+
+  return loaded ? (
+    <>
+      <CurrentPageNav>
+        &#187; <a href="#">{faculties[0].university.universityName}</a>
+      </CurrentPageNav>
+      <ProfessorCard>
+        <ProfessorCardName>
+          {faculties[0].university.universityName}
+        </ProfessorCardName>
+        <ProfessorCardSeparator />
+        <ProfessorCardDetails fontSize="20px">
+          {faculties[0].university.city.cityName}
+        </ProfessorCardDetails>
+      </ProfessorCard>
+      <div key={params.universityId}>
+        {faculties.map((faculty) => {
+          let totalPosts = 0;
+          let totalSections = 0;
+          faculty.professors.map((professor) => {
+            totalPosts += professor.relatedOpinions.length;
+            totalSections++;
+          });
+          faculty.studyProgrammes.map((studyProgramme) => {
+            studyProgramme.subjects.map((subject) => {
+              totalPosts += subject.threads.length;
+              totalSections++;
+            });
+          });
+
+          return (
+            <EntityUl key={faculty.facultyId}>
+              <EntityLi bgcolor="cornsilk">
+                <a href={"/faculty/" + faculty.facultyId}>
+                  {faculty.facultyName}
+                </a>
+                <EntityParam>
+                  {totalSections}{" "}
+                  {totalSections !== 1 ? (
+                    <span style={{ fontWeight: "normal" }}>секции,</span>
+                  ) : (
+                    <span style={{ fontWeight: "normal" }}>секција</span>
+                  )}
+                  <span style={{ opacity: totalPosts === 0 ? "0.5" : "1" }}>
+                    {totalPosts}
+                  </span>{" "}
+                  {totalPosts !== 1 ? (
+                    <span
+                      style={{
+                        fontWeight: "normal",
+                        opacity: totalPosts === 0 ? "0.5" : "1",
+                      }}
+                    >
+                      мислења
+                    </span>
+                  ) : (
+                    <span style={{ fontWeight: "normal" }}>мислење</span>
+                  )}
+                </EntityParam>
+              </EntityLi>
+            </EntityUl>
+          );
+        })}
+      </div>
+    </>
+  ) : !fetchError ? (
+    <div>
+      <p style={{ marginTop: "140px" }}>се вчитува...</p>
+      <Outlet />
+    </div>
+  ) : (
+    <div style={{ marginTop: "140px" }}>
+      <h1 style={{ textAlign: "center" }}>Страницата не е пронајдена.</h1>
+    </div>
+  );
+};
+
+export default University;
