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} +

    +
    +
    +

    {blog.description}

    +
    +
    + ); + }) + ) : ( +

    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; +}