diff --git a/package-lock.json b/package-lock.json
index cc19eb2..437e7b9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,6 +10,7 @@
"dependencies": {
"@tailwindcss/vite": "^4.1.11",
"lucide-react": "^0.525.0",
+ "next-themes": "^0.4.6",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-icons": "^5.5.0",
@@ -3238,6 +3239,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/next-themes": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz",
+ "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
+ }
+ },
"node_modules/node-releases": {
"version": "2.0.19",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
diff --git a/package.json b/package.json
index 46ea31a..cd9cb4e 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"dependencies": {
"@tailwindcss/vite": "^4.1.11",
"lucide-react": "^0.525.0",
+ "next-themes": "^0.4.6",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-icons": "^5.5.0",
diff --git a/src/App.jsx b/src/App.jsx
index 41aef08..8a72c3c 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,8 +1,14 @@
import Footer from "./components/Footer.jsx";
import Navbar from "./components/Navbar.jsx";
import { Outlet } from "react-router-dom";
+import { useEffect } from "react";
+import { applyTheme } from "./config/theme";
const App = () => {
+ useEffect(() => {
+ applyTheme();
+ }, []);
+
return (
<>
diff --git a/src/components/AboutSection.jsx b/src/components/AboutSection.jsx
index c0c2b97..ab2208d 100644
--- a/src/components/AboutSection.jsx
+++ b/src/components/AboutSection.jsx
@@ -4,7 +4,7 @@ export default function AboutSection() {
return (
{/* Image Section */}
@@ -24,24 +24,13 @@ export default function AboutSection() {
{/* Text Content */}
-
+
{siteConfig.about.title}
-
+
{siteConfig.about.description}
-
-
diff --git a/src/components/AchievementCard.jsx b/src/components/AchievementCard.jsx
index 3d37d0b..ea84bd7 100644
--- a/src/components/AchievementCard.jsx
+++ b/src/components/AchievementCard.jsx
@@ -26,7 +26,7 @@ const ImageCarousel = ({ images, title }) => {
return (
-
+
setIsHovered(true)}
@@ -140,8 +140,8 @@ const AchievementCard = ({
{/* Top accent line with animation */}
-
-
+
@@ -150,8 +150,8 @@ const AchievementCard = ({
{/* Year badge with enhanced styling */}
-
{/* Title with enhanced typography */}
-
+
{title}
{/* Description with better spacing */}
-
+
{description}
@@ -177,12 +177,12 @@ const AchievementCard = ({
diff --git a/src/components/Achievements.jsx b/src/components/Achievements.jsx
index 8ecbd3c..a3bf140 100644
--- a/src/components/Achievements.jsx
+++ b/src/components/Achievements.jsx
@@ -5,15 +5,15 @@ export default function Achievements() {
const navigate = useNavigate();
return (
-
+
{/* Header Section */}
-
+
Our Achievements
-
+
ASME NIT Rourkela excels in fostering innovation and leadership
through workshops, competitions, and expert lectures. Recognized
for achievements in events like the Student Design Challenge and
@@ -26,7 +26,7 @@ export default function Achievements() {
navigate("/achievements")}
>
View all Achievements
@@ -41,25 +41,25 @@ export default function Achievements() {
.map((item, index) => (
-
-
+
{item.title}
-
+
{item.description}
{/* Simple accent line */}
-
+
))}
diff --git a/src/components/EventCard.jsx b/src/components/EventCard.jsx
index c859fbc..56cad8e 100644
--- a/src/components/EventCard.jsx
+++ b/src/components/EventCard.jsx
@@ -42,19 +42,22 @@ const EventCard = ({ title, description, images, date, location, status }) => {
const getStatusColor = (status) => {
switch (status?.toLowerCase()) {
case "upcoming":
- return "bg-blue-50 text-blue-600 border-blue-200";
+ return "bg-blue-50 text-blue-600 border-blue-200 dark:bg-[#163A72] dark:text-blue-100 dark:border-blue-400/40";
+
case "ongoing":
- return "bg-green-50 text-green-600 border-green-200";
+ return "bg-green-50 text-green-600 border-green-200 dark:bg-[#0F5132] dark:text-emerald-100 dark:border-emerald-400/40";
+
case "completed":
- return "bg-gray-50 text-gray-600 border-gray-200";
+ return "bg-gray-50 text-gray-600 border-gray-200 dark:bg-[#334155] dark:text-slate-100 dark:border-slate-500";
+
default:
- return "bg-gray-50 text-gray-600 border-gray-200";
+ return "bg-gray-50 text-gray-600 border-gray-200 dark:bg-[#334155] dark:text-slate-100 dark:border-slate-500";
}
};
return (
setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
>
@@ -135,10 +138,10 @@ const EventCard = ({ title, description, images, date, location, status }) => {
{/* Content Section */}
-
+
{title || "Event Title"}
-
+
{description || "Event description will be displayed here."}
@@ -146,27 +149,27 @@ const EventCard = ({ title, description, images, date, location, status }) => {
{/* Event Meta Information */}
{date && (
-
-
+
+
{date}
)}
{location && (
-
{/* Action Button */}
-
+
View Details
{/* Accent line */}
-
+
);
};
diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx
index b1c5c30..c08c814 100644
--- a/src/components/Footer.jsx
+++ b/src/components/Footer.jsx
@@ -13,7 +13,7 @@ const Footer = ({
year = new Date().getFullYear(),
}) => {
return (
-
+
{/* Logo and Description Section */}
diff --git a/src/components/GallerySection.jsx b/src/components/GallerySection.jsx
index 32979e5..4da948a 100644
--- a/src/components/GallerySection.jsx
+++ b/src/components/GallerySection.jsx
@@ -17,15 +17,15 @@ export default function GallerySection() {
};
return (
-
+
{/* Header Section */}
-
+
Gallery
-
+
Explore our vibrant moments captured through stunning visuals that
showcase our activities, achievements, and memorable experiences.
@@ -34,7 +34,7 @@ export default function GallerySection() {
View Full Gallery
@@ -70,7 +70,7 @@ export default function GallerySection() {
{/* Accent line */}
-
+
))}
diff --git a/src/components/HeroSection.jsx b/src/components/HeroSection.jsx
index f440c35..40c6850 100644
--- a/src/components/HeroSection.jsx
+++ b/src/components/HeroSection.jsx
@@ -1,9 +1,16 @@
import Button from "./shared/Button";
import { siteConfig } from "../config/navbarHero";
+import { useNavigate } from "react-router-dom";
+
export default function HeroSection() {
+ const navigate = useNavigate();
+ const handleJoinUs = () => {
+ navigate("/applications");
+ };
+
return (
-
+
{/* Subtle background pattern */}
-
+
{siteConfig.hero.title}
-
+
{siteConfig.hero.subtitle}
-
+
{siteConfig.hero.description}
diff --git a/src/components/MissionSection.jsx b/src/components/MissionSection.jsx
index ad3098b..38dd3b6 100644
--- a/src/components/MissionSection.jsx
+++ b/src/components/MissionSection.jsx
@@ -12,7 +12,7 @@ export default function MissionSection() {
return (
{/* Subtle Background Elements */}
@@ -23,10 +23,10 @@ export default function MissionSection() {
{/* Section Header */}
-
+
Driving Innovation Forward
-
+
Discover the core values and principles that guide our engineering
community toward innovation, collaboration, and excellence in
technology.
@@ -48,7 +48,7 @@ export default function MissionSection() {
{/* Bottom CTA Section - Matching Card Colors */}
-
+
{/* Decorative Elements - White with opacity */}
@@ -57,10 +57,10 @@ export default function MissionSection() {
-
+
Ready to Join Our Mission?
-
+
Be part of a community that's shaping the future of technology
and innovation. Connect with like-minded engineers and make an
impact.
@@ -68,7 +68,7 @@ export default function MissionSection() {
Join Us
diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx
index 51d2cba..34e8687 100644
--- a/src/components/Navbar.jsx
+++ b/src/components/Navbar.jsx
@@ -1,12 +1,15 @@
import { siteConfig } from "../config/navbarHero";
import Button from "./shared/Button";
import { useState, useEffect } from "react";
-import { useNavigate } from "react-router-dom";
+import { useNavigate, NavLink } from "react-router-dom";
+import ThemeToggle from "./ThemeToggle";
+import { isDark, subscribeTheme } from "../config/theme";
export default function Navbar() {
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
const navigate = useNavigate();
const [scrolled, setScrolled] = useState(false);
+ const [dark, setDark] = useState(isDark());
useEffect(() => {
const handleScroll = () => {
@@ -29,6 +32,12 @@ export default function Navbar() {
};
}, [mobileMenuOpen]);
+ useEffect(() => {
+ return subscribeTheme(() => {
+ setDark(isDark());
+ });
+ }, []);
+
const handleJoinUsClick = () => {
navigate("/applications");
};
@@ -44,15 +53,27 @@ export default function Navbar() {