Index: reactapp/src/Components/OpinionTree.js
===================================================================
--- reactapp/src/Components/OpinionTree.js	(revision 2fcbde46bc3f0a4c5537847f541c020a00ec9b29)
+++ reactapp/src/Components/OpinionTree.js	(revision 62b653fbfa2f2521de0bbd3bc445083c3cf5f032)
@@ -8,4 +8,5 @@
   OpinionReplyCardContentTime,
   StyledFontAwesomeIcon,
+  VoteCount,
 } from "./Styled/OpinionCard.style";
 import { solid } from "@fortawesome/fontawesome-svg-core/import.macro";
@@ -37,17 +38,44 @@
   const [postForModal, setPostForModal] = useState(null);
 
-  const handleLike = () => {
-    if (auth) {
+  const handleLike = async (post) => {
+    if (
+      auth &&
+      userLoaded &&
+      !post.likes.some((e) => e.id === user.user.id) &&
+      !post.dislikes.some((e) => e.id === user.user.id)
+    ) {
+      const response = await axios(
+        `http://192.168.0.17:8080/secure/professor/${professor.professorId}/upvoteOpinion/${post.postId}`,
+        {
+          method: "get",
+          withCredentials: true,
+        }
+      );
+
+      window.location.reload(false);
+    } else {
       return;
+    }
+  };
+
+  const handleDislike = async (post) => {
+    if (
+      auth &&
+      auth &&
+      userLoaded &&
+      !post.likes.some((e) => e.id === user.user.id) &&
+      !post.dislikes.some((e) => e.id === user.user.id)
+    ) {
+      const response = await axios(
+        `http://192.168.0.17:8080/secure/professor/${professor.professorId}/downvoteOpinion/${post.postId}`,
+        {
+          method: "get",
+          withCredentials: true,
+        }
+      );
+
+      window.location.reload(false);
     } else {
-      navigate("/login");
-    }
-  };
-
-  const handleDislike = () => {
-    if (auth) {
       return;
-    } else {
-      navigate("/login");
     }
   };
@@ -74,5 +102,5 @@
 
     const response = await axios(
-      `http://192.168.0.19:8080/secure/professor/${professor.professorId}/replyToOpinion/${postId}`,
+      `http://192.168.0.17:8080/secure/professor/${professor.professorId}/replyToOpinion/${postId}`,
       {
         method: "post",
@@ -110,17 +138,27 @@
                   icon={solid("thumbs-up")}
                   right={50 + "px"}
-                  color="greenyellow"
-                  onClick={handleLike}
+                  color={
+                    child.likes.some((e) => e.id === user.user.id)
+                      ? "greenyellow"
+                      : "darkgrey"
+                  }
+                  onClick={() => handleLike(child)}
                 />
+                <VoteCount right={50 + "px"}>{child.likes.length}</VoteCount>
                 <StyledFontAwesomeIcon
                   icon={solid("thumbs-down")}
                   right={10 + "px"}
-                  color="indianred"
-                  onClick={handleDislike}
+                  color={
+                    child.dislikes.some((e) => e.id === user.user.id)
+                      ? "indianred"
+                      : "darkgrey"
+                  }
+                  onClick={() => handleDislike(child)}
                 />
+                <VoteCount right={10 + "px"}>{child.dislikes.length}</VoteCount>
                 <StyledFontAwesomeIcon
                   icon={solid("reply")}
                   right={90 + "px"}
-                  color="black"
+                  color="darkgrey"
                   onClick={() => handleReply(child)}
                 />
@@ -166,17 +204,31 @@
                         icon={solid("thumbs-up")}
                         right={50 + "px"}
-                        color="greenyellow"
-                        onClick={handleLike}
+                        color={
+                          opinion.likes.some((e) => e.id === user.user.id)
+                            ? "greenyellow"
+                            : "darkgrey"
+                        }
+                        onClick={() => handleLike(opinion)}
                       />
+                      <VoteCount right={50 + "px"}>
+                        {opinion.likes.length}
+                      </VoteCount>
                       <StyledFontAwesomeIcon
                         icon={solid("thumbs-down")}
                         right={10 + "px"}
-                        color="indianred"
-                        onClick={handleDislike}
+                        color={
+                          opinion.dislikes.some((e) => e.id === user.user.id)
+                            ? "indianred"
+                            : "darkgrey"
+                        }
+                        onClick={() => handleDislike(opinion)}
                       />
+                      <VoteCount right={10 + "px"}>
+                        {opinion.dislikes.length}
+                      </VoteCount>
                       <StyledFontAwesomeIcon
                         icon={solid("reply")}
                         right={90 + "px"}
-                        color="black"
+                        color="darkgrey"
                         onClick={() => handleReply(opinion)}
                       />
Index: reactapp/src/Components/Search.js
===================================================================
--- reactapp/src/Components/Search.js	(revision 2fcbde46bc3f0a4c5537847f541c020a00ec9b29)
+++ reactapp/src/Components/Search.js	(revision 62b653fbfa2f2521de0bbd3bc445083c3cf5f032)
@@ -15,5 +15,5 @@
 
   useEffect(() => {
-    const url = `http://192.168.0.19:8080/public/professors/nameContains/${transliterate(
+    const url = `http://192.168.0.17:8080/public/professors/nameContains/${transliterate(
       query
     )}`;
Index: reactapp/src/Components/Styled/OpinionCard.style.js
===================================================================
--- reactapp/src/Components/Styled/OpinionCard.style.js	(revision 2fcbde46bc3f0a4c5537847f541c020a00ec9b29)
+++ reactapp/src/Components/Styled/OpinionCard.style.js	(revision 62b653fbfa2f2521de0bbd3bc445083c3cf5f032)
@@ -52,5 +52,5 @@
 
 export const StyledFontAwesomeIcon = styled(FontAwesomeIcon)`
-  color: darkgrey;
+  color: ${(props) => props.color};
   display: block;
   position: absolute;
@@ -64,2 +64,12 @@
   }
 `;
+
+export const VoteCount = styled.p`
+  color: darkgrey;
+  display: block;
+  position: absolute;
+  top: 80%;
+  transform: translateY(-50%);
+  right: ${(props) => props.right};
+  transition: 0.5s;
+`;
