diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 7c851a2f..d7d504ae 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -5,132 +5,85 @@ import FooterWrapper from "@/components/layout/FooterWrapper";
import { AuthProvider } from "@/context/AuthContext";
import { GamificationProvider } from "@/context/GamificationContext";
import { RealTimeProvider } from "@/context/RealTimeContext";
-import { AnimatedBackground } from "@/components/AnimatedBackground";
+import { AnimatedBackground } from '@/components/AnimatedBackground';
-import MaintenanceBanner from "@/components/layout/MaintenanceBanner";
-import BackgroundMesh from "@/components/layout/BackgroundMesh";
-import PageWrapper from "@/components/layout/PageWrapper";
+import MaintenanceBanner from '@/components/layout/MaintenanceBanner';
+import BackgroundMesh from '@/components/layout/BackgroundMesh';
+import PageWrapper from '@/components/layout/PageWrapper';
import { ThemeProvider } from "@/components/providers/theme-provider";
-
import "./globals.css";
-const inter = Inter({
- subsets: ["latin"],
- variable: "--font-inter",
-});
-
-const spaceGrotesk = Space_Grotesk({
- subsets: ["latin"],
- variable: "--font-space",
-});
-
+const inter = Inter({ subsets: ["latin"], variable: '--font-inter' });
+const spaceGrotesk = Space_Grotesk({ subsets: ["latin"], variable: '--font-space' });
const barlowCondensed = Barlow_Condensed({
- weight: ["900"],
- subsets: ["latin"],
- variable: "--font-barlow",
+ weight: ['900'],
+ subsets: ['latin'],
+ variable: '--font-barlow'
});
export const metadata: Metadata = {
- metadataBase: new URL("https://devpath-website.web.app"),
-
+ metadataBase: new URL('https://devpath-website.web.app'),
title: {
default: "DevPath Community",
template: "%s | DevPath Community",
},
-
- description:
- "Join 50,000+ developers accelerating their coding skills through structured paths, real projects, and an active community.",
-
- keywords: [
- "DevPath",
- "Coding Community",
- "Developer Community",
- "Learn to Code",
- "Programming",
- "Software Engineering",
- "Web Development",
- "App Development",
- ],
-
+ description: "Join 50,000+ developers accelerating their coding skills through structured paths, real projects, and an active community.",
+ keywords: ["DevPath", "Coding Community", "Developer Community", "Learn to Code", "Programming", "Software Engineering", "Web Development", "App Development"],
authors: [{ name: "DevPath Team" }],
-
creator: "DevPath Community",
-
publisher: "DevPath Community",
-
robots: {
index: true,
follow: true,
-
googleBot: {
index: true,
follow: true,
- "max-video-preview": -1,
- "max-image-preview": "large",
- "max-snippet": -1,
+ 'max-video-preview': -1,
+ 'max-image-preview': 'large',
+ 'max-snippet': -1,
},
},
-
openGraph: {
type: "website",
locale: "en_US",
url: "https://devpath-website.web.app",
-
title: "DevPath Community",
-
- description:
- "Join 50,000+ developers accelerating their coding skills through structured paths, real projects, and an active community.",
-
+ description: "Join 50,000+ developers accelerating their coding skills through structured paths, real projects, and an active community.",
siteName: "DevPath Community",
-
images: [
{
- url: "/logo-circle.png",
+ url: "/DevPath-logo.png",
width: 800,
height: 600,
alt: "DevPath Community Logo",
},
],
},
-
twitter: {
card: "summary_large_image",
-
title: "DevPath Community",
-
- description:
- "Join 50,000+ developers accelerating their coding skills through structured paths, real projects, and an active community.",
-
- images: ["/logo-circle.png"],
-
- creator: "@DevPath_Community",
+ description: "Join 50,000+ developers accelerating their coding skills through structured paths, real projects, and an active community.",
+ images: ["/DevPath-logo.png"],
+ creator: "@DevPath_Community", // Assuming handle
},
-
icons: {
- icon: "/logo-circle.png",
- apple: "/logo-circle.png",
+ icon: '/DevPath-logo.png',
+ apple: '/DevPath-logo.png',
},
};
const jsonLd = {
"@context": "https://schema.org",
-
"@type": "Organization",
-
- name: "DevPath Community",
-
- url: "https://devpath-website.web.app",
-
- logo: "https://devpath-website.web.app/logo-circle.png",
-
- sameAs: [
+ "name": "DevPath Community",
+ "url": "https://devpath-website.web.app",
+ "logo": "https://devpath-website.web.app/DevPath-logo.png",
+ "sameAs": [
"https://twitter.com/DevPath_Community",
"https://www.linkedin.com/company/devpath-community",
- "https://github.com/devpathindcommunity-india/DevPath-Web",
+ "https://github.com/devpathindcommunity-india/DevPath-Web"
],
-
- description:
- "A community of 50,000+ developers accelerating their coding skills through structured paths and real projects.",
+ "description": "A community of 50,000+ developers accelerating their coding skills through structured paths and real projects."
};
export default function RootLayout({
@@ -140,9 +93,7 @@ export default function RootLayout({
}>) {
return (
-
+
-
-
{/* */}
-
-
-
- {children}
-
+
+ {children}
+
@@ -177,4 +122,4 @@ export default function RootLayout({
);
-}
\ No newline at end of file
+}
diff --git a/src/components/home/Community.tsx b/src/components/home/Community.tsx
index eee56a29..f7861900 100644
--- a/src/components/home/Community.tsx
+++ b/src/components/home/Community.tsx
@@ -1,51 +1,36 @@
-"use client";
-
+"use client"
import { MessageCircle } from 'lucide-react';
import { motion } from 'framer-motion';
import Image from 'next/image';
-
+import logo from '@/assets/logo.png';
import Button from '../ui/Button';
-
import styles from './Community.module.css';
-const logo = "/logo-circle.png";
-
export default function Community() {
return (
-
- {/* Left Content */}
- Join Our Thriving
-
+ Join Our Thriving
Developer Community
-
- Connect with developers worldwide, share knowledge,
- and stay updated with the latest tech trends.
- Get help when you're stuck and celebrate your
- wins together.
+ Connect with developers worldwide, share knowledge, and stay updated with the latest tech trends.
+ Get help when you're stuck and celebrate your wins together.
-
- }
- >
+ }>
Join DevPath Community
- {/* Right Mockup */}
-
- {/* Header */}
-
-
+
-
-
- DevPath Official
-
-
+ DevPath Official
325 online
-
-
- {/* Chat Body */}
-
- {/* Message 1 */}
-
-
+
-
- Sarah Chen
-
-
-
- Today at 10:42 AM
-
+ Sarah Chen
+ Today at 10:42 AM
-
-
- Just finished the Advanced React Patterns
- course! The compound components section
- was a game changer. 🚀
-
+
Just finished the Advanced React Patterns course! The compound components section was a game changer. 🚀
- {/* Message 2 */}
-
-
+
-
- Alex Rivera
-
-
-
- Today at 10:45 AM
-
+ Alex Rivera
+ Today at 10:45 AM
-
-
- Congrats Sarah! I'm working on the
- Node.js path right now. Would love to
- see your final project.
-
+
Congrats Sarah! I'm working on the Node.js path right now. Would love to see your final project.
- {/* Message 3 */}
-
-
+
-
- Mike Johnson
-
-
-
- Today at 10:48 AM
-
+ Mike Johnson
+ Today at 10:48 AM
-
-
- Anyone up for a code review?
- I just pushed some changes to the
- open source dashboard project.
-
+
Anyone up for a code review? I just pushed some changes to the open source dashboard project.
-
-
);
-}
\ No newline at end of file
+}
diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx
index 75ed0acc..7543d1b8 100644
--- a/src/components/layout/Footer.tsx
+++ b/src/components/layout/Footer.tsx
@@ -1,51 +1,27 @@
import Link from 'next/link';
import Image from 'next/image';
-
-import {
- Github,
- Book,
- Flag,
- Users,
- RefreshCw,
- Code,
- MessageSquare
-} from 'lucide-react';
-
+import { Github, Book, Flag, Users, RefreshCw, Code, MessageSquare } from 'lucide-react';
+import logo from '@/assets/logo.png';
import styles from './Footer.module.css';
-
import { MagneticText } from '../ui/magnetic-text';
import { siteConfig } from '@/config/siteConfig';
import AppStoreButtons from '../ui/AppStoreButtons';
-const logo = "/logo-circle.png";
-
export default function Footer() {
return (
-
- {/* Brand Section */}
-
-
+
{siteConfig.name}
-
{siteConfig.tagline}
- {/* Resources */}
-
Wiki & Docs
-
Feature Flags
-
Contributors
- {/* Links */}
-
Community Complaint
-
Updater
-
Source Code
- {/* App Buttons */}
-
- Get the App
-
-
-
+
Get the App
+
- {/* Contact */}
-
- Contact Us
-
-
+
Contact Us
- {/* Bottom */}
-
- © {new Date().getFullYear()} {siteConfig.name}. All rights reserved.
-
+
© {new Date().getFullYear()} {siteConfig.name}. All rights reserved.
-
- {/* Socials */}
-
{/* GitHub */}
-
-
-
+
+
-
-
+
@@ -191,31 +119,10 @@ export default function Footer() {
className={`${styles.socialIcon} hover:scale-110 hover:text-blue-500 transition-all`}
aria-label="LinkedIn"
>
-
+
-
-
-
-
+
+
@@ -223,4 +130,4 @@ export default function Footer() {
);
-}
\ No newline at end of file
+}
diff --git a/src/components/layout/Navbar.tsx b/src/components/layout/Navbar.tsx
index 17edbed9..55ec794e 100644
--- a/src/components/layout/Navbar.tsx
+++ b/src/components/layout/Navbar.tsx
@@ -1,363 +1,258 @@
"use client";
-import { useState, useMemo } from "react";
-import Link from "next/link";
-import { usePathname } from "next/navigation";
-import Image from "next/image";
+import { useState, useMemo } from 'react';
+import Link from 'next/link';
+import { usePathname } from 'next/navigation';
+import Image from 'next/image';
+import { motion, AnimatePresence } from 'framer-motion';
+import { Flame, Github, LogIn, Menu, X, LogOut, Lock } from 'lucide-react';
+import logo from '@/assets/logo.png';
+import { useAuth } from '@/context/AuthContext';
+import { NotificationDropdown } from '@/components/NotificationDropdown';
+import { ThemeToggle } from '@/components/ui/theme-toggle';
+import styles from './Navbar.module.css';
+import { calculateStreak } from '@/lib/streakUtils';
+import { useScroll, useSpring } from 'framer-motion';
+import { useMaintenance } from '@/hooks/useMaintenance';
-import {
- motion,
- AnimatePresence,
- useScroll,
- useSpring,
-} from "framer-motion";
-
-import {
- Flame,
- Github,
- LogIn,
- Menu,
- X,
- LogOut,
- Lock,
-} from "lucide-react";
-
-import { useAuth } from "@/context/AuthContext";
-import { NotificationDropdown } from "@/components/NotificationDropdown";
-import { ThemeToggle } from "@/components/ui/theme-toggle";
-import { calculateStreak } from "@/lib/streakUtils";
-import { useMaintenance } from "@/hooks/useMaintenance";
-
-import styles from "./Navbar.module.css";
-
-const logo = "/logo-circle.png";
const navLinks = [
- { href: "/", label: "Home" },
- { href: "/courses", label: "Courses" },
- { href: "/pathway", label: "Pathway" },
- { href: "/community", label: "Community" },
- { href: "/resources", label: "Resources" },
- { href: "/events", label: "Events" },
- { href: "/opensource", label: "Open Source" },
- { href: "/team", label: "Team" },
+ { href: '/', label: 'Home' },
+ { href: '/courses', label: 'Courses' },
+ { href: '/pathway', label: 'Pathway' },
+ { href: '/community', label: 'Community' },
+ { href: '/resources', label: 'Resources' },
+ { href: '/events', label: 'Events' },
+ { href: '/opensource', label: 'Open Source' },
+ { href: '/team', label: 'Team' },
];
export default function Navbar() {
- const { user, login, logout } = useAuth();
-
- const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
-
- const { isMaintenanceMode } = useMaintenance();
-
- const pathname = usePathname();
-
- const { currentStreak } = useMemo(
- () => calculateStreak(user?.loginDates),
- [user?.loginDates]
- );
-
- const toggleMobileMenu = () => {
- if (!isMaintenanceMode) {
- setMobileMenuOpen(!mobileMenuOpen);
- }
- };
-
- const closeMobileMenu = () => setMobileMenuOpen(false);
-
- const { scrollYProgress } = useScroll();
-
- const scaleX = useSpring(scrollYProgress, {
- stiffness: 100,
- damping: 30,
- restDelta: 0.001,
- });
-
- if (pathname === "/ap") return null;
-
- return (
- <>
-
-
- {/* Logo */}
-
-
-
-
-
- DevPath
-
-
- {/* Navigation */}
-
-
- {navLinks.map((link) =>
- isMaintenanceMode ? (
-
- {link.label === "Community" && (
-
- )}
-
- {link.label}
-
- ) : (
-
- {link.label}
-
- )
- )}
-
-
- {/* Progress Bar */}
-
-
-
- {/* Actions */}
-
- {user && (
-
-
-
-
- {currentStreak}
-
-
- )}
-
-
-
-
-
-
-
-
-
- {user ? (
-
- {user.photoURL ? (
-
- ) : (
-
- {user.name?.charAt(0).toUpperCase()}
-
- )}
-
- ) : (
-
-
-
-
- Login
-
-
- )}
-
- {/* Mobile Menu Button */}
-
-
-
- Menu
-
-
-
-
-
-
-
-
- {navLinks.map((link) => (
-
- {link.label}
-
- ))}
-
-
-
-
-
-
- Toggle Theme
-
-
- {user ? (
-
-
{user.name}
-
- ) : (
-
-
-
-
Login
-
- )}
-
- {user && (
-
{
- logout();
- closeMobileMenu();
- window.location.href = "/";
- }}
- style={{
- color: "#ef4444",
- borderColor: "#ef4444",
- }}
- >
-
-
- Logout
-
- )}
-
-
- >
- )}
-
- >
- );
-}
\ No newline at end of file
+
+
+
+
+
+ DevPath
+
+
+ {/* Center Pill Navigation */}
+
+
+ {navLinks.map((link) => (
+ isMaintenanceMode ? (
+
+ {link.label === 'Community' && }
+ {link.label}
+
+ ) : (
+
+ {link.label}
+
+ )
+ ))}
+
+
+
+ {/* Scroll Progress Line attached to Pill */}
+
+
+
+
+ {user && (
+
+
+ {currentStreak}
+
+ )}
+
+
+
+
+
+
+
+ {user ? (
+
+ {user.photoURL ? (
+
+ ) : (
+
+ {user.name?.charAt(0).toUpperCase()}
+
+ )}
+
+ ) : (
+
+
+
Login
+
+ )}
+
+ {/* Hamburger Menu Button (Mobile Only) */}
+
+ {mobileMenuOpen ? : }
+
+
+
+
+
+ {/* Mobile Menu Drawer */}
+
+ {
+ mobileMenuOpen && (
+ <>
+ {/* Backdrop */}
+
+
+ {/* Drawer */}
+
+
+ Menu
+
+
+
+
+
+
+ {navLinks.map((link) => (
+
+ {link.label}
+
+
+ ))}
+
+
+
+
+
+ Toggle Theme
+
+
+ {user ? (
+
+
{user.name}
+
+ ) : (
+
+
+
Login
+
+ )}
+ {user && (
+
{
+ logout();
+ closeMobileMenu();
+ window.location.href = '/';
+ }}
+ style={{ color: '#ef4444', borderColor: '#ef4444' }}
+ >
+
+ Logout
+
+ )}
+
+
+ >
+ )
+ }
+
+ >
+ );
+}