diff --git a/src/App.jsx b/src/App.jsx
index fee585b..3efbc1e 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -9,6 +9,8 @@ import RoboSub from "./Pages/RoboSub";
import AUVTechnology from "./Pages/AUVTechnology";
import Sponsors from "./Pages/Sponsors";
import OurTeam from "./Pages/OurTeam";
+import Blog from "./Pages/Blog";
+import {blogs} from "./data/blogData"
import "./App.css";
function App() {
@@ -24,6 +26,7 @@ function App() {
} />
} />
} />
+ } />
{/* We'll add a footer component later */}
diff --git a/src/Components/Navbar.jsx b/src/Components/Navbar.jsx
index 2f72180..704ab10 100644
--- a/src/Components/Navbar.jsx
+++ b/src/Components/Navbar.jsx
@@ -75,6 +75,15 @@ function Navbar() {
About Us
+
+
+ Blog
+
+
{
+ const matchesYear = filterYear ? blog.year === filterYear : true;
+ const matchesCategory = filterCategory ? blog.category === filterCategory : true;
+ return matchesYear && matchesCategory;
+ });
+
+ const years = Array.from(new Set(blogs.map(b => b.year))).sort((a,b) => b-a);
+ const categories = Array.from(new Set(blogs.map(b => b.category)));
+
+ const handleYearClick = (year) => {
+ setFilterYear(year);
+ setFilterCategory(null);
+ };
+
+ const handleCategoryClick = (cat) => {
+ setFilterCategory(cat);
+ setFilterYear(null);
+ };
+
+ const getFilterText = () => {
+ if (filterYear) {
+ return `${filterYear}`;
+ } else if (filterCategory) {
+ return `${filterCategory}`;
+ }
+ return null;
+ };
+
+ return (
+
+
+
+
+
Our Blog
+
+
MIL blog posts since 2011
+ {getFilterText() && (
+
{getFilterText()}
+ )}
+
+
+
+
+
+
+
+ {filteredBlogs.length > 0 ? (
+ filteredBlogs.map((blog, index) => {
+ const blogDate = new Date(`${blog.year}-${blog.month}-${blog.day}`);
+ return (
+
+
+
{blog.title}
+
+ {blogDate.toLocaleDateString(undefined, {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ })} | {blog.category} | {blog.author}
+
+
+
+
+ );
+ })
+ ) : (
+
No blog posts available.
+ )}
+
+
+
+
+
+
+ );
+}
+
+export default Blog;
\ No newline at end of file
diff --git a/src/data/blogData.js b/src/data/blogData.js
new file mode 100644
index 0000000..cda834c
--- /dev/null
+++ b/src/data/blogData.js
@@ -0,0 +1,21 @@
+export const blogs = [
+ {
+ title: "Post1 placeholder",
+ year: "2025",
+ month: "06",
+ day: "12",
+ category: "Sponsorship News",
+ description: "Post 1",
+ author: "SubjuGator"
+ },
+ {
+ title: "Post2 placeholder",
+ year: "2025",
+ month: "06",
+ day: "12",
+ category: "Team News",
+ description: "Post 2",
+ author: "SubjuGator"
+ }
+ ];
+
\ No newline at end of file
diff --git a/src/styles/Blog.css b/src/styles/Blog.css
new file mode 100644
index 0000000..923b071
--- /dev/null
+++ b/src/styles/Blog.css
@@ -0,0 +1,127 @@
+.blog-page {
+ background-color: var(--color-background);
+ color: #fff;
+ min-height: 100vh;
+}
+
+.blog-hero-section {
+ min-height: 40vh;
+ display: flex;
+ align-items: flex-end;
+ justify-content: center;
+ position: relative;
+ background-image: url("/src/assets/blog-hero.jpg");
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+ overflow: hidden;
+}
+
+.blog-hero-section .hero-content {
+ text-align: center;
+ margin-bottom: 40px;
+}
+
+.blog-list-section {
+ padding: 50px 20px;
+}
+
+.blog-list-section .container.blog-layout {
+ display: grid;
+ grid-template-columns: minmax(0, 1060px) 300px;
+ gap: 40px;
+ max-width: 1400px;
+ margin: 0 auto;
+}
+
+.blog-list-column {
+ display: flex;
+ flex-direction: column;
+ gap: 30px;
+ width: 100%;
+}
+
+.blog-card {
+ background-color: var(--color-ui-dark);
+ border-radius: 10px;
+ padding: 30px;
+ border: 1px solid rgba(255, 255, 255, 0.08);
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
+ width: 100%;
+ min-height: 250px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+
+.blog-card:hover {
+ transform: translateY(-6px);
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+ border-color: rgba(250, 70, 22, 0.3);
+}
+
+.blog-card-header {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ margin-bottom: 15px;
+}
+
+.blog-title {
+ font-size: 1.8rem;
+ margin: 0;
+ color: #fff;
+}
+
+.blog-date {
+ font-size: 1.5rem;
+ color: rgba(255, 255, 255, 0.6);
+ margin-top: 5px;
+}
+
+.blog-description {
+ font-size: 1.5rem;
+ line-height: 1.6;
+ color: rgba(255, 255, 255, 0.85);
+}
+
+.no-blogs {
+ text-align: center;
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 1.1rem;
+}
+
+.blog-sidebar {
+ background-color: var(--color-ui-dark);
+ padding: 20px;
+ border-radius: 10px;
+ height: fit-content;
+}
+
+.blog-sidebar h3 {
+ margin-bottom: 10px;
+ color: #fff;
+}
+
+.sidebar-link {
+ cursor: pointer;
+ color: rgba(255, 255, 255, 0.8);
+ margin-bottom: 5px;
+}
+
+.sidebar-link:hover {
+ color: #fa4616;
+ text-decoration: underline;
+}
+
+.sidebar-clear:hover {
+ color: #fa4616;
+ text-decoration: underline;
+}
+
+.filter-display {
+ margin-top: 15px;
+ font-size: 2.5rem;
+ color: #fff;
+ font-weight: 600;
+}