diff --git a/website/src/components/Dashboard/SideMenu.tsx b/website/src/components/Dashboard/SideMenu.tsx
index 30a45777..499117a2 100644
--- a/website/src/components/Dashboard/SideMenu.tsx
+++ b/website/src/components/Dashboard/SideMenu.tsx
@@ -1,6 +1,6 @@
import { Box, Button, Link, Text, Tooltip, useColorMode } from "@chakra-ui/react";
import { useRouter } from "next/router";
-import { FiLayout, FiSun } from "react-icons/fi";
+import { FiLayout, FiSun, FiMessageSquare } from "react-icons/fi";
import { colors } from "styles/Theme/colors";
export function SideMenu() {
@@ -13,6 +13,12 @@ export function SideMenu() {
desc: "Dashboard Home",
icon: FiLayout,
},
+ {
+ label: "Messages",
+ pathname: "/messages",
+ desc: "Messages Dashboard",
+ icon: FiMessageSquare,
+ },
// {
// label: "Leaderboard",
// pathname: "#",
diff --git a/website/src/pages/api/messages.ts b/website/src/pages/api/messages.ts
new file mode 100644
index 00000000..a6a6d981
--- /dev/null
+++ b/website/src/pages/api/messages.ts
@@ -0,0 +1,34 @@
+import { boolean } from "boolean";
+import { getToken } from "next-auth/jwt";
+
+
+const handler = async (req, res) => {
+ const token = await getToken({ req });
+
+ // Return nothing if the user isn't registered.
+ if (!token) {
+ res.status(401).end();
+ return;
+ }
+
+ //TODO: add params if needed
+ const reqParams = req.query;
+ console.log(reqParams);
+ const params = new URLSearchParams({
+ username: boolean(reqParams.allUsers)? "" : token.sub,
+ });
+console.log(params);
+ const messagesRes = await fetch(`${process.env.FASTAPI_URL}/api/v1/messages?${params}`, {
+ method: "GET",
+ headers: {
+ "X-API-Key": process.env.FASTAPI_KEY,
+ "Content-Type": "application/json",
+ },
+ },);
+ const messages = await messagesRes.json();
+
+ // Send recieved messages to the client.
+ res.status(200).json(messages);
+}
+
+export default handler;
diff --git a/website/src/pages/messages.tsx b/website/src/pages/messages.tsx
new file mode 100644
index 00000000..f8512ae3
--- /dev/null
+++ b/website/src/pages/messages.tsx
@@ -0,0 +1,106 @@
+import { Box, CircularProgress, HStack, Image, SimpleGrid, Stack, StackDivider, Text, useColorMode, useColorModeValue } from "@chakra-ui/react";
+import Head from "next/head";
+import { useState } from "react";
+import useSWRImmutable from "swr/immutable";
+
+import fetcher from "src/lib/fetcher";
+import { SideMenu } from "src/components/Dashboard";
+import { FlaggableElement } from "src/components/FlaggableElement";
+import { Header } from "src/components/Header";
+import { colors } from "styles/Theme/colors";
+
+const MessageTable = ({ messages, isLoading }) => {
+ const backgroundColor = useColorModeValue("white", "gray.700");
+ const accentColor = useColorModeValue("gray.200", "gray.900");
+
+ return (
+