diff --git a/gradesa/public/logo_placeholder.png b/gradesa/public/logo_placeholder.png
new file mode 100644
index 0000000..a190d20
Binary files /dev/null and b/gradesa/public/logo_placeholder.png differ
diff --git a/gradesa/src/app/layout.js b/gradesa/src/app/layout.js
index 66c5e12..fc061aa 100644
--- a/gradesa/src/app/layout.js
+++ b/gradesa/src/app/layout.js
@@ -1,5 +1,7 @@
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
+import Navbar from "@/components/ui/navigation";
+import Sidebar from "@/components/ui/sidenavigation";
const geistSans = Geist({
variable: "--font-geist-sans",
@@ -20,6 +22,8 @@ export default function RootLayout({ children }) {
return (
+
+
{children}
diff --git a/gradesa/src/components/ui/navbar.css b/gradesa/src/components/ui/navbar.css
new file mode 100644
index 0000000..17e006d
--- /dev/null
+++ b/gradesa/src/components/ui/navbar.css
@@ -0,0 +1,23 @@
+@import "/globals.css";
+
+.navbar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background-color: var(--bg3);
+ color: var(--secondary9);
+ padding: 1rem;
+}
+
+.navbar-left.logo {
+ font-size: 1.5rem;
+ font-weight: bold;
+ text-decoration: none;
+}
+
+.navbar-center.nav-links {
+ display: flex;
+ margin: 10px;
+ padding: 10px;
+ gap: 20px;
+}
diff --git a/gradesa/src/components/ui/navigation.js b/gradesa/src/components/ui/navigation.js
new file mode 100644
index 0000000..b75908b
--- /dev/null
+++ b/gradesa/src/components/ui/navigation.js
@@ -0,0 +1,26 @@
+import Image from "next/image";
+import Link from "next/link";
+import "./navbar.css";
+
+const Navbar = () => {
+ return (
+
+ );
+};
+
+export default Navbar;
diff --git a/gradesa/src/components/ui/sidebar.css b/gradesa/src/components/ui/sidebar.css
new file mode 100644
index 0000000..ee168aa
--- /dev/null
+++ b/gradesa/src/components/ui/sidebar.css
@@ -0,0 +1,58 @@
+@import "/globals.css";
+
+.sidebar {
+ position: absolute;
+ height: 100%;
+ width: 25%;
+ padding-top: 20px;
+ padding-left: 50px;
+ z-index: 1;
+ overflow-x: hidden;
+ left: 0;
+ display: flex;
+ flex-direction: column;
+ align-items: left;
+ justify-content: left;
+ background-color: var(--bg3);
+ white-space: nowrap;
+}
+
+.sidebar-left {
+ font-size: 1.5rem;
+ font-weight: bold;
+ color: var(--secondary9);
+ text-decoration: none;
+}
+
+.sidebar-left.nav-links {
+ display: block;
+ background-color: var(--secondary8);
+ margin: 10px;
+ padding: 10px;
+ gap: 20px;
+}
+
+.dropdown {
+ width: 20%;
+ font-size: var(--font-lg);
+ color: var(--secondary1);
+ flex-direction: column;
+ display: block;
+}
+
+.dropdown-button {
+ cursor: pointer;
+ background-color: var(--fg2);
+ color: var(--secondary1);
+ border: none;
+ padding: 10px;
+ text-align: left;
+
+}
+
+/* Note: this refers to the dropdown-menu
+in sidenavigation.js */
+.menu {
+ display: none;
+ position: flex;
+}
\ No newline at end of file
diff --git a/gradesa/src/components/ui/sidenavigation.js b/gradesa/src/components/ui/sidenavigation.js
new file mode 100644
index 0000000..3752ac9
--- /dev/null
+++ b/gradesa/src/components/ui/sidenavigation.js
@@ -0,0 +1,39 @@
+"use client";
+
+import { useState } from "react";
+import Link from "next/link";
+import "./sidebar.css";
+
+const Sidebar = () => {
+ const [isDropdownOpen, setDropdownOpen] = useState(false);
+
+ const toggleDropdown = () => {
+ setDropdownOpen((previousState) => !previousState);
+ };
+
+ return (
+
+ );
+};
+
+export default Sidebar;