From bc90612b27ba3ac456abd6c3d606a2cd878b9799 Mon Sep 17 00:00:00 2001 From: Tom Mathew Date: Sun, 11 Jan 2026 23:31:49 +0530 Subject: [PATCH 1/3] online resources --- package-lock.json | 49 +++-- package.json | 6 +- src/app/onlineresources/page.jsx | 5 - src/app/onlineresources/page.tsx | 300 +++++++++++++++++++++++++++++++ src/data/resources.ts | 128 +++++++++++++ 5 files changed, 467 insertions(+), 21 deletions(-) delete mode 100644 src/app/onlineresources/page.jsx create mode 100644 src/app/onlineresources/page.tsx create mode 100644 src/data/resources.ts diff --git a/package-lock.json b/package-lock.json index 9442df2..979315a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,8 @@ "@tsparticles/react": "^3.0.0", "@tsparticles/slim": "^3.9.1", "cloudinary": "^2.7.0", - "framer-motion": "^12.23.24", + "clsx": "^2.1.1", + "framer-motion": "^12.25.0", "gl-matrix": "^3.4.4", "gsap": "^3.13.0", "lucide-react": "^0.548.0", @@ -27,7 +28,8 @@ "react-dom": "19.1.0", "react-icons": "^5.5.0", "react-type-animation": "^3.2.0", - "react-typed": "^2.0.12" + "react-typed": "^2.0.12", + "tailwind-merge": "^3.4.0" }, "devDependencies": { "@eslint/eslintrc": "^3", @@ -3436,6 +3438,15 @@ "node": ">=9" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4500,13 +4511,13 @@ } }, "node_modules/framer-motion": { - "version": "12.23.24", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.24.tgz", - "integrity": "sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==", + "version": "12.25.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.25.0.tgz", + "integrity": "sha512-mlWqd0rApIjeyhTCSNCqPYsUAEhkcUukZxH3ke6KbstBRPcxhEpuIjmiUQvB+1E9xkEm5SpNHBgHCapH/QHTWg==", "license": "MIT", "dependencies": { - "motion-dom": "^12.23.23", - "motion-utils": "^12.23.6", + "motion-dom": "^12.24.11", + "motion-utils": "^12.24.10", "tslib": "^2.4.0" }, "peerDependencies": { @@ -6069,18 +6080,18 @@ } }, "node_modules/motion-dom": { - "version": "12.23.23", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", - "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", + "version": "12.24.11", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.24.11.tgz", + "integrity": "sha512-DlWOmsXMJrV8lzZyd+LKjG2CXULUs++bkq8GZ2Sr0R0RRhs30K2wtY+LKiTjhmJU3W61HK+rB0GLz6XmPvTA1A==", "license": "MIT", "dependencies": { - "motion-utils": "^12.23.6" + "motion-utils": "^12.24.10" } }, "node_modules/motion-utils": { - "version": "12.23.6", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", - "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "version": "12.24.10", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.24.10.tgz", + "integrity": "sha512-x5TFgkCIP4pPsRLpKoI86jv/q8t8FQOiM/0E8QKBzfMozWHfkKap2gA1hOki+B5g3IsBNpxbUnfOum1+dgvYww==", "license": "MIT" }, "node_modules/mpath": { @@ -7454,6 +7465,16 @@ "react": ">=17.0" } }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, "node_modules/tailwindcss": { "version": "4.1.14", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.14.tgz", diff --git a/package.json b/package.json index 33755f4..5dffc79 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "@tsparticles/react": "^3.0.0", "@tsparticles/slim": "^3.9.1", "cloudinary": "^2.7.0", - "framer-motion": "^12.23.24", + "clsx": "^2.1.1", + "framer-motion": "^12.25.0", "gl-matrix": "^3.4.4", "gsap": "^3.13.0", "lucide-react": "^0.548.0", @@ -28,7 +29,8 @@ "react-dom": "19.1.0", "react-icons": "^5.5.0", "react-type-animation": "^3.2.0", - "react-typed": "^2.0.12" + "react-typed": "^2.0.12", + "tailwind-merge": "^3.4.0" }, "devDependencies": { "@eslint/eslintrc": "^3", diff --git a/src/app/onlineresources/page.jsx b/src/app/onlineresources/page.jsx deleted file mode 100644 index d8605a2..0000000 --- a/src/app/onlineresources/page.jsx +++ /dev/null @@ -1,5 +0,0 @@ -export default function OnlineResourcesPage() { - return ( -

Online Resources Page

- ); -} diff --git a/src/app/onlineresources/page.tsx b/src/app/onlineresources/page.tsx new file mode 100644 index 0000000..9402c51 --- /dev/null +++ b/src/app/onlineresources/page.tsx @@ -0,0 +1,300 @@ +"use client"; + +import React, { useState, useRef } from "react"; +import { + BookOpen, + Youtube, + ExternalLink, + Download, + PlayCircle, + X, + FileText +} from "lucide-react"; +import Navbar from "../components/Navbar"; +import { motion, AnimatePresence } from "framer-motion"; +import NeuralBackground from "@/app/components/NeuralBackground"; +import { resources, ResourceItem } from "../../data/resources"; // Import the data + +// --- 1. Custom Bento Card --- +interface BentoCardProps { + item: ResourceItem; + onClick: () => void; +} + +const BentoCard = ({ item, onClick }: BentoCardProps) => { + const divRef = useRef(null); + const [position, setPosition] = useState({ x: 0, y: 0 }); + + const handleMouseMove = (e: React.MouseEvent) => { + if (!divRef.current) return; + const rect = divRef.current.getBoundingClientRect(); + setPosition({ x: e.clientX - rect.left, y: e.clientY - rect.top }); + }; + + return ( + + {/* Animated gradient overlay */} + + {/* Spotlight Effect */} + + + + {/* Card Content */} +
+
+ + {item.type === 'book' ? ( + + ) : ( + + )} + + + + +
+ +
+

{item.title}

+

{item.author}

+
+ + {item.type === 'book' ? 'PDF' : 'Playlist'} + +
+
+
+ + {/* Overlay (Appears on Hover) */} + + + {item.type === 'book' ? : } + {item.type === 'book' ? "Read Now" : "Watch Now"} + + +
+ ); +}; + +// --- 2. Resource Modal --- +interface ResourceModalProps { + resource: ResourceItem; + onClose: () => void; +} + +const ResourceModal = ({ resource, onClose }: ResourceModalProps) => { + if (!resource) return null; + + return ( + + + + + {/* Animated background gradient */} + + + + + +
+ + {resource.type === 'book' ? : } + + + +

{resource.title}

+

{resource.author}

+
+ + + {resource.description} + + + + {/* Primary Action: Read or Watch */} + + {resource.type === 'book' ? : } + {resource.type === 'book' ? 'Read Now' : 'Watch on YouTube'} + + + {/* Secondary Action: Download (Only for books) */} + {resource.type === 'book' && resource.downloadUrl && ( + + + + )} + +
+
+
+ ); +}; + +// --- 3. Main Page Component --- +export default function OnlineResources() { + const [selectedResource, setSelectedResource] = useState(null); + + return ( +
+ + + + {/* FOOTER REMOVAL HACK */} + + +
+ + {/* Header */} + +

+ Library +

+

+ Essential readings and curated playlists for the ML4E team. +

+
+ + {/* BENTO GRID LAYOUT */} +
+ {resources.map((res) => ( + setSelectedResource(res)} + /> + ))} +
+ +
+ + {/* Modal Overlay */} + + {selectedResource && ( + setSelectedResource(null)} + /> + )} + +
+ ); +} \ No newline at end of file diff --git a/src/data/resources.ts b/src/data/resources.ts new file mode 100644 index 0000000..a7ec30d --- /dev/null +++ b/src/data/resources.ts @@ -0,0 +1,128 @@ +// src/data/resources.ts + +export interface ResourceItem { + id: string; + title: string; + author: string; + type: "book" | "video"; + size?: string; + description: string; + link: string; + downloadUrl?: string; + color: string; + span: string; +} + +export const resources: ResourceItem[] = [ + // --- BOOKS (4 Items) --- + { + id: "book-math", + title: "Mathematics for Machine Learning", + author: "Deisenroth, Faisal, Ong", + type: "book", + size: "17 MB", + description: "The fundamental mathematical tools needed to understand machine learning.", + link: "/books/mathematics-for-machine-learning.pdf", + downloadUrl: "/books/mathematics-for-machine-learning.pdf", + color: "rgb(132, 0, 255)", // Purple + span: "md:col-span-1 md:row-span-2", + }, + { + id: "book-bishop", + title: "Pattern Recognition & ML", + author: "Christopher Bishop", + type: "book", + size: "17 MB", + description: "A comprehensive guide to pattern recognition. The classic textbook.", + link: "/books/pattern-recognition-and-machine-learning.pdf", + downloadUrl: "/books/pattern-recognition-and-machine-learning.pdf", + color: "rgb(6, 182, 212)", // Cyan + span: "md:col-span-1 md:row-span-2", + }, + { + id: "book-geron", + title: "Hands-On Machine Learning", + author: "Aurélien Géron", + type: "book", + size: "19 MB", + description: "Learn Scikit-Learn, Keras, and TensorFlow with practical examples.", + link: "/books/hands-on-machine-learning.pdf", + downloadUrl: "/books/hands-on-machine-learning.pdf", + color: "rgb(255, 165, 0)", // Orange + span: "md:col-span-1 md:row-span-2", + }, + { + id: "book-goodfellow", + title: "Deep Learning", + author: "Ian Goodfellow et al.", + type: "book", + size: "25 MB", + description: "The Bible of Deep Learning. Covers theoretical foundations and modern architectures.", + link: "/books/deep-learning.pdf", + downloadUrl: "/books/deep-learning.pdf", + color: "rgb(236, 72, 153)", // Pink + span: "md:col-span-1 md:row-span-2", + }, + + // --- VIDEOS (6 Items) --- + { + id: "vid-custom", + title: "ML Essentials Playlist", + author: "Rishi Das (NITR)", + type: "video", + description: "Curated collection of essential lectures for the team.", + link: "https://youtube.com/playlist?list=PLKnIA16_Rmvbr7zKYQuBfsVkjoLcJgxHH&si=gRTfZe-hSD7WySmJ", + color: "rgb(59, 130, 246)", // Blue + span: "md:col-span-2 md:row-span-1", + }, + { + id: "vid-karpathy", + title: "Neural Networks: Zero to Hero", + author: "Andrej Karpathy", + type: "video", + description: "The best deep learning course available online. Builds everything from scratch.", + link: "https://youtube.com/playlist?list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ&si=2kNG0A4Au3P4FFGu", + color: "rgb(239, 68, 68)", // Red + span: "md:col-span-1 md:row-span-1", + }, + { + id: "vid-cs229", + title: "CS229: Machine Learning", + author: "Stanford University", + type: "video", + description: "The legendary course that started it all. Deep dive into theory.", + link: "https://youtube.com/playlist?list=PLoROMvodv4rMFqRtEuo6SGjY4XbRIVRd4&si=Dxd5SNKqosiMF43I", + color: "rgb(16, 185, 129)", // Emerald + span: "md:col-span-1 md:row-span-1", + }, + { + id: "vid-cs230", + title: "CS230: Deep Learning", + author: "Stanford University", + type: "video", + description: "Learn the foundations of Deep Learning, understand how to build neural networks.", + link: "https://youtube.com/playlist?list=PLoROMvodv4rPLKxIpqhjhPgdQy7imNkDn&si=vYrxzQmrpR9mdeap", + color: "rgb(139, 92, 246)", // Violet + span: "md:col-span-2 md:row-span-1", + }, + { + id: "vid-huggingface", + title: "Hugging Face Course", + author: "Hugging Face", + type: "video", + description: "Master NLP and Transformers using the Hugging Face ecosystem.", + link: "https://youtube.com/playlist?list=PLqzoL9-eJTNBZDG8jaNuhap1C9q6VHyVa&si=RQ8G8NEnshebHShB", + color: "rgb(250, 204, 21)", // Yellow + span: "md:col-span-1 md:row-span-1", + }, + { + id: "vid-cs231n", + title: "CS231n: Vision", + author: "Stanford University", + type: "video", + description: "Convolutional Neural Networks for Visual Recognition.", + link: "https://youtube.com/playlist?list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk&si=_fL7EVbhxugqrQiP", + color: "rgb(236, 72, 153)", // Pink + span: "md:col-span-1 md:row-span-1", + } +]; \ No newline at end of file From 95e6a57fd8a4c7965b5bf2ef73138c2e5f01481f Mon Sep 17 00:00:00 2001 From: Shoaib1M Date: Wed, 14 Jan 2026 23:13:00 +0530 Subject: [PATCH 2/3] updating the footerr --- src/app/components/Footer.jsx | 159 +++++++++++++++++++++++----------- 1 file changed, 107 insertions(+), 52 deletions(-) diff --git a/src/app/components/Footer.jsx b/src/app/components/Footer.jsx index a46e50b..8a68527 100644 --- a/src/app/components/Footer.jsx +++ b/src/app/components/Footer.jsx @@ -1,5 +1,6 @@ "use client"; import React from "react"; +import { Linkedin, Instagram, Mail, Phone } from "lucide-react"; const Glow = ({ className = "" }) => (
- {/* */} +
+ - {/* Container */} -
- {/* Title */} -

+
+

ML4E

- {/* Cards */} -
- {/* Faculty Advisor */} -
-

- Faculty Advisor -

-

- Prof. Khalid Mirza
- Assistant Professor, BM-BT Department -

-

- Phone: 0661-26462458 -

- - ✉️ baigm@nitrkl.ac.in - +
+
+
+
+ +

+ Faculty Advisor +

+ +
+
+

+ Prof. Khalid Mirza +

+

+ Assistant Professor, BM-BT Department +

+
+
+ 0661-26462458 +
+
+ + + baigm@nitrkl.ac.in + +
- {/* President */} -
-

- President -

-

- Kunal Kushwaha -

-

Phone: +91 70676 21946

- - ✉️ 123ee0291@nitrkl.ac.in - +
+
+
+ +

+ President +

+ +
+
+

+ Kunal Kushwaha +

+

+ Club President +

+
+
+ +91 70676 21946 +
+
+ + + 123ee0291@nitrkl.ac.in + +
- {/* Bottom line */} -
-

- Made with ❤️ by Team ML4E +

+
+ + Connect With Us + +
+
+ + + +
+

+ Made with{" "} + ❤️{" "} + by Team ML4E +

+

+ © {year} ALL RIGHTS RESERVED

-

© {year}

); -} \ No newline at end of file +} From 9de3a22224adf44be5f041bc15d29c23fc7ff312 Mon Sep 17 00:00:00 2001 From: Shoaib1M Date: Wed, 14 Jan 2026 23:18:13 +0530 Subject: [PATCH 3/3] updating the footer page --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index c4081af..50a2122 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "react-jsx", + "jsx": "preserve", "incremental": true, "plugins": [ {