From 02d8dea9a9584ba2f0b0e01c69a0b9f2a7de69f8 Mon Sep 17 00:00:00 2001 From: Amudieshwar A G Date: Tue, 18 Aug 2026 12:27:27 +0530 Subject: [PATCH] feat: reorder toolkit & navbar, update RAISE incubator & portal modules, fix faculty department filtering --- .../src/main/resources/application.properties | 2 +- package-lock.json | 28 +- src/components/Navbar/Navbar.tsx | 64 ++- src/constants/index.ts | 49 ++- src/pages/Events/Events.tsx | 14 +- src/pages/Faculty/Faculty.tsx | 48 +-- src/pages/Notes/Notes.tsx | 379 +++++++++++++----- src/pages/Toolkit/Toolkit.tsx | 61 ++- 8 files changed, 479 insertions(+), 166 deletions(-) diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index da2aad2..788959b 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -1,7 +1,7 @@ # ─── DATABASE CONNECTION CONFIGURATION ─── spring.datasource.url=jdbc:postgresql://localhost:5432/rit_freshers_hub?sslmode=disable spring.datasource.username=postgres -spring.datasource.password=${DB_PASSWORD:Anbukathir@2006} +spring.datasource.password=${DB_PASSWORD:Amudiesh22@.} # ─── JPA / HIBERNATE SETTINGS ─── spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect diff --git a/package-lock.json b/package-lock.json index 9bbdf1f..0674289 100644 --- a/package-lock.json +++ b/package-lock.json @@ -102,7 +102,6 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -1637,6 +1636,17 @@ "tslib": "^2.4.0" } }, + "node_modules/@emnapi/runtime": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emnapi/wasi-threads": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", @@ -4422,7 +4432,6 @@ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.101.3.tgz", "integrity": "sha512-ZjgcRwmQUSCythDPj6pE2NKFi9bpQegxIBxgt3hPytXI1ElFHNaa3A7aWW8vFaLCIRjPv467rbREYHbxcdgQbg==", "license": "MIT", - "peer": true, "dependencies": { "@tanstack/query-core": "5.101.3" }, @@ -4508,7 +4517,6 @@ "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.18.0" } @@ -4519,7 +4527,6 @@ "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -4530,7 +4537,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -4606,7 +4612,6 @@ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -4865,7 +4870,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.42", "caniuse-lite": "^1.0.30001803", @@ -6541,8 +6545,7 @@ "version": "1.9.4", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/leven": { "version": "3.1.0", @@ -7170,7 +7173,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", @@ -7214,7 +7216,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -7224,7 +7225,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -7237,7 +7237,6 @@ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.82.0.tgz", "integrity": "sha512-Zw/uFZ2dO+02GHlBn7JFGn8kZJ7LdM33B/0BXOovzFay+CMhf94JMw5BVu+F1tVkUKjNvBuaE3fz5BJhga10Tg==", "license": "MIT", - "peer": true, "engines": { "node": ">=18.0.0" }, @@ -7544,7 +7543,6 @@ "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.9" }, @@ -8090,7 +8088,6 @@ "integrity": "sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", @@ -8416,7 +8413,6 @@ "integrity": "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.5", diff --git a/src/components/Navbar/Navbar.tsx b/src/components/Navbar/Navbar.tsx index d31262f..4a86a45 100644 --- a/src/components/Navbar/Navbar.tsx +++ b/src/components/Navbar/Navbar.tsx @@ -19,6 +19,8 @@ import { Users, Code2, Trophy, + Ticket, + Award, GraduationCap, LayoutDashboard, Home as HomeIcon, @@ -38,19 +40,24 @@ const PRIMARY_LINKS: NavItem[] = [ { label: 'Toolkit', path: '/toolkit', icon: Wrench }, { label: 'Chatbot', path: '/ai-assistant', icon: Bot }, { label: 'Clubs & Centers', path: '/events', icon: Users }, - { label: 'Dev Collab', path: '/collab', icon: Code2 }, - { label: 'LeetCode', path: '/leetcode', icon: Trophy }, -]; - -const MORE_LINKS: NavItem[] = [ { label: 'Campus Map', path: '/campus', icon: Map }, { label: 'Bus Routes', path: '/bus-routes', icon: Bus }, { label: 'Faculty Directory', path: '/faculty', icon: UserCheck }, { label: 'Community', path: '/community', icon: MessageCircle }, - { label: 'RAISE Incubator', path: '/raise', icon: Rocket }, ]; -const ALL_MOBILE_LINKS: NavItem[] = [...PRIMARY_LINKS, ...MORE_LINKS]; +const MORE_LINKS: NavItem[] = [ + { label: 'Dev Collab', path: '/collab', icon: Code2 }, + { label: 'LeetCode', path: '/leetcode', icon: Trophy }, + { label: 'Student Gate Pass', path: '/notes?portal=gatepass', icon: Ticket }, + { label: 'Student Proficiency', path: '/notes?portal=proficiency', icon: Award }, +]; + +const ALL_MOBILE_LINKS: NavItem[] = [ + ...PRIMARY_LINKS, + ...MORE_LINKS, + { label: 'RAISE Incubator', path: '/raise', icon: Rocket }, +]; export default function Navbar() { const [isMobileOpen, setIsMobileOpen] = useState(false); @@ -81,12 +88,15 @@ export default function Navbar() { }, []); const checkIsActive = (linkPath: string) => { - const [pathName] = linkPath.split('?'); - if (pathName === '/') return location.pathname === '/'; - return location.pathname.startsWith(pathName); + if (linkPath === '/') return location.pathname === '/'; + if (linkPath === '/notes') return location.pathname === '/notes'; + if (linkPath.includes('?')) { + return location.pathname + location.search === linkPath; + } + return location.pathname.startsWith(linkPath); }; - const isMoreActive = MORE_LINKS.some((link) => checkIsActive(link.path)); + const isMoreActive = MORE_LINKS.some((link) => !link.path.startsWith('/notes') && checkIsActive(link.path)); return ( <> @@ -96,7 +106,7 @@ export default function Navbar() { initial={{ y: -60, opacity: 0 }} animate={{ y: 0, opacity: 1 }} transition={{ duration: 0.45, ease: 'easeOut' }} - className="pointer-events-auto flex items-center justify-between gap-2 lg:gap-4 px-3 sm:px-4 py-2 rounded-2xl bg-slate-950/90 backdrop-blur-xl border border-white/10 shadow-[0_8px_30px_rgba(0,0,0,0.35)] transition-all" + className="relative pointer-events-auto flex items-center justify-between gap-2 lg:gap-4 px-3 sm:px-4 py-2 rounded-2xl bg-slate-950/90 backdrop-blur-xl border border-white/10 shadow-[0_8px_30px_rgba(0,0,0,0.35)] transition-all" > {/* Left: Logo & College Brand */} @@ -193,12 +203,12 @@ export default function Navbar() { onClick={() => setIsMoreOpen(false)} className={`flex items-center gap-2.5 px-3 py-2 rounded-xl text-xs font-medium transition-all ${ active - ? 'bg-gradient-to-r from-[#FF6B00] to-[#F97316] text-white font-bold' + ? 'bg-white/15 text-orange-400 font-semibold' : 'text-slate-300 hover:text-white hover:bg-white/10' }`} style={{ fontFamily: 'Plus Jakarta Sans, sans-serif' }} > - {IconComponent && } + {IconComponent && } {item.label} ); @@ -344,6 +354,7 @@ export default function Navbar() {
{ALL_MOBILE_LINKS.map((link) => { const isActive = checkIsActive(link.path); + const isRaise = link.path === '/raise'; const IconComp = link.icon; return ( setIsMobileOpen(false)} className={`px-3 py-2.5 rounded-xl text-xs font-semibold flex items-center gap-2 transition-all ${ - isActive + isRaise + ? 'bg-gradient-to-r from-[#EC4899] via-[#F43F5E] to-[#E11D48] text-white font-bold shadow-md shadow-pink-500/30 col-span-2 justify-center' + : isActive ? 'bg-gradient-to-r from-[#FF6B00] to-[#F97316] text-white shadow-sm' : 'bg-white/5 text-slate-200 hover:bg-white/10 border border-white/5' }`} @@ -396,6 +409,27 @@ export default function Navbar() { )} + + {/* Floating RAISE Incubator Button directly below Sign In at right corner */} + + + + RAISE Incubator + + diff --git a/src/constants/index.ts b/src/constants/index.ts index 7de26d8..213e909 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -117,13 +117,22 @@ export const FEATURES: Feature[] = [ bgColor: '#FFFBEB', }, { - id: 'raise', - icon: 'Rocket', - title: 'RAISE Incubator', - description: 'Pitch startup ideas, get incubation support, seed funding opportunities, and entrepreneurial mentoring.', - path: '/raise', - color: '#EC4899', - bgColor: '#FDF2F8', + id: 'gatepass', + icon: 'Ticket', + title: 'Student Gate Pass', + description: 'Request digital campus out-pass, track warden approvals, and present clearance QR codes.', + path: '/notes?portal=gatepass', + color: '#10B981', + bgColor: '#ECFDF5', + }, + { + id: 'proficiency', + icon: 'Award', + title: 'Student Proficiency', + description: 'Track domain competency scores, placement readiness analytics, and verified skill certifications.', + path: '/notes?portal=proficiency', + color: '#8B5CF6', + bgColor: '#F5F3FF', }, ]; @@ -3104,6 +3113,26 @@ export const EVENTS_DATA: Event[] = [ // ─── Clubs ─────────────────────────────────────────────────────────────────── export const CLUBS_DATA: Club[] = [ + { + id: 'center_raise', + name: 'RAISE INCUBATOR', + description: 'Pitch startup ideas, get incubation support, seed funding opportunities, and entrepreneurial mentoring.', + details: 'RAISE Incubator is a dedicated Section 8 (not-for-profit) company situated directly within the Rajalakshmi Institute of Technology campus. We transform engineering ideas into market-viable products with seed funding, mentoring, and patent support.', + category: 'Center of Excellence', + type: 'Center', + members: 2450, + presidentName: 'Incubation Director', + vicePresidentName: 'Startup Lead', + coordinatorName: 'Dr. RIT Innovation Cell', + year: 'Campus Incubation Center', + contactEmail: 'incubator@ritchennai.edu.in', + contactPhone: '+91 44 6718 1600', + icon: 'Rocket', + logoUrl: '/logo.png', + socialLinks: { + website: '/raise', + }, + }, { id: 'nss', name: 'NSS OF RIT', @@ -3760,13 +3789,13 @@ export const QUESTIONS_DATA: Question[] = [ // ─── Toolkit Items ─────────────────────────────────────────────────────────── export const TOOLKIT_ITEMS: ToolkitItem[] = [ + { id: '7', title: 'GPA and internal calculator', description: 'Access GPA, CGPA, and internal marks calculator utilities.', type: 'link', url: '#', icon: 'Calculator', category: 'Engineering' }, { id: '1', title: 'CS tools', description: 'Access specialized development environments, IDE configurations, compiler guides, GitHub setup instructions, and essential documentation for Computer Science students.', type: 'link', url: '#', icon: 'Code', category: 'Engineering' }, { id: '2', title: 'Business tools', description: 'Explore enterprise resource planning (ERP) guides, financial spreadsheets, management templates, and business analytics tools for CSBS and management students.', type: 'link', url: '#', icon: 'Briefcase', category: 'Engineering' }, { id: '3', title: 'Cybersecurity tools', description: 'Discover network simulators, virtualization setup guides, penetration testing tutorials, cryptography tools, and security lab blueprints.', type: 'link', url: '#', icon: 'Shield', category: 'Engineering' }, { id: '4', title: 'AI tools', description: 'Configure machine learning frameworks, deep learning libraries, Jupyter environments, dataset download scripts, and pre-trained model APIs.', type: 'link', url: '#', icon: 'Brain', category: 'Engineering' }, { id: '5', title: 'Electrical and Electronic tools', description: 'Access circuit design simulators, MATLAB packages, microcontroller IDE setups, hardware debugging guides, and lab calculation spreadsheets.', type: 'link', url: '#', icon: 'Cpu', category: 'Engineering' }, { id: '6', title: 'Biotech tools', description: 'Find biology lab guidelines, chemical structure tools, bioinformatics databases tutorials, genetic sequence analysis resources, and safety manuals.', type: 'link', url: '#', icon: 'FlaskConical', category: 'Engineering' }, - { id: '7', title: 'GPA and internal calculator', description: 'Access GPA, CGPA, and internal marks calculator utilities.', type: 'link', url: '#', icon: 'Calculator', category: 'Engineering' }, ]; // ─── Campus Locations ──────────────────────────────────────────────────────── @@ -3803,5 +3832,9 @@ export const DEPARTMENTS = [ 'Computer Science & Engineering', 'Electronics & Communication Engineering', 'Electronics Engineering VLSI (Design and Technology)', + 'Humanities & Sciences', + 'M.E. (VLSI Design)', + 'M.Tech (Data Science)', + 'Mathematics', 'Mechanical Engineering', ]; diff --git a/src/pages/Events/Events.tsx b/src/pages/Events/Events.tsx index c8aab1f..53fdf7d 100644 --- a/src/pages/Events/Events.tsx +++ b/src/pages/Events/Events.tsx @@ -1,4 +1,5 @@ import { useState, useMemo } from 'react'; +import { Link } from 'react-router-dom'; import { motion, AnimatePresence } from 'framer-motion'; import { Users, Tag, X, Mail, Phone, UserCheck, GraduationCap, Info, @@ -869,7 +870,8 @@ export default function Events() { selectedClub.socialLinks?.instagram || selectedClub.socialLinks?.linkedin || selectedClub.socialLinks?.whatsapp || - selectedClub.socialLinks?.youtube + selectedClub.socialLinks?.youtube || + selectedClub.socialLinks?.website ) && (
@@ -881,6 +883,16 @@ export default function Events() {
+ {selectedClub.socialLinks?.website && ( + setSelectedClub(null)} + className="flex items-center gap-2 p-2.5 rounded-xl bg-gradient-to-r from-[#EC4899] via-[#F43F5E] to-[#E11D48] text-white hover:from-pink-600 hover:to-rose-600 transition-all text-xs font-bold shadow-xs col-span-2 justify-center" + > + + Launch RAISE Incubator Portal → + + )} {selectedClub.socialLinks?.instagram && ( = { - 'Computer Science & Engineering': { abrv: 'CSE', full: 'Computer Science and Engineering' }, - 'Computer Science & Business Systems': { abrv: 'CSBS', full: 'Computer Science and Business Systems' }, - 'Artificial Intelligence & Machine Learning': { abrv: 'AIML', full: 'Artificial Intelligence and Machine Learning' }, - 'Electronics & Communication Engineering': { abrv: 'ECE', full: 'Electronics and Communication Engineering' }, + 'Computer Science & Engineering': { abrv: 'CSE', full: 'Computer Science & Engineering' }, + 'Computer Science & Business Systems': { abrv: 'CSBS', full: 'Computer Science & Business Systems' }, + 'Artificial Intelligence & Machine Learning': { abrv: 'AIML', full: 'Artificial Intelligence & Machine Learning' }, + 'Electronics & Communication Engineering': { abrv: 'ECE', full: 'Electronics & Communication Engineering' }, 'Mechanical Engineering': { abrv: 'MECH', full: 'Mechanical Engineering' }, 'Civil Engineering': { abrv: 'CIVIL', full: 'Civil Engineering' }, - 'Artificial Intelligence & Data Science': { abrv: 'AI&DS', full: 'Artificial Intelligence and Data Science' }, - 'Electrical & Electronics Engineering': { abrv: 'EEE', full: 'Electrical and Electronics Engineering' }, + 'Artificial Intelligence & Data Science': { abrv: 'AI & DS', full: 'Artificial Intelligence & Data Science' }, + 'Electrical & Electronics Engineering': { abrv: 'EEE', full: 'Electrical & Electronics Engineering' }, 'Communication and Computer Engineering': { abrv: 'CCE', full: 'Communication and Computer Engineering' }, - 'Electronics Engineering VLSI (Design and Technology)': { abrv: 'EE VLSI (D&T)', full: 'Electronics Engineering (VLSI Design and Technology)' }, - 'Humanities & Sciences': { abrv: 'H&S', full: 'Humanities and Sciences' }, + 'Electronics Engineering VLSI (Design and Technology)': { abrv: 'EE VLSI (D&T)', full: 'Electronics Engineering VLSI (Design and Technology)' }, + 'Humanities & Sciences': { abrv: 'H&S', full: 'Humanities & Sciences' }, 'M.Tech (Data Science)': { abrv: 'M.TECH-DS', full: 'M.Tech (Data Science)' }, 'Mathematics': { abrv: 'MATHS', full: 'Mathematics' }, 'M.E. (VLSI Design)': { abrv: 'MEVLSI', full: 'M.E. (VLSI Design)' }, @@ -109,8 +109,13 @@ export default function Faculty() { }, [filteredAndSortedFaculty]); const departmentOrder = useMemo(() => { - return DEPARTMENTS.filter(d => d !== 'All Departments'); - }, []); + const presentDepts = Object.keys(groupedFaculty); + const sorted = DEPARTMENTS.filter(d => d !== 'All Departments'); + presentDepts.forEach(d => { + if (!sorted.includes(d)) sorted.push(d); + }); + return sorted; + }, [groupedFaculty]); return (
@@ -173,27 +178,6 @@ export default function Faculty() { )} - {/* Under Development Banner */} - -
-
- -
-
-
Under Development
-
- Currently displaying sample mock faculty profiles. Official RIT faculty directory integration is in progress. -
-
-
- - Mock Data Active - -
{/* Faculty Hero Section */}
diff --git a/src/pages/Notes/Notes.tsx b/src/pages/Notes/Notes.tsx index 3d818e3..3419c2e 100644 --- a/src/pages/Notes/Notes.tsx +++ b/src/pages/Notes/Notes.tsx @@ -1,10 +1,12 @@ import { useState, useRef, useEffect } from 'react'; import { useSearchParams } from 'react-router-dom'; import { motion } from 'framer-motion'; -import { Search, Download, Filter, BookOpen, FileText, ScrollText, BookMarked, ChevronRight, ArrowLeft, ExternalLink, Code, Globe, GitBranch, Cloud, Palette, Shield, DollarSign, BarChart3, Users, Megaphone, TrendingUp, UserCheck, ClipboardList, ShoppingCart, Cpu, Activity, LayoutGrid, Layers, Zap, Settings, Gauge, Radio, Wifi, Bot, Sun, Wrench, Binary, BatteryCharging, CircuitBoard, ShieldCheck, BrainCircuit, FlaskConical, Lock, Terminal, Dna, Microscope, Sparkles, Smartphone, Monitor, Server, CheckCircle2, Database, Briefcase, AlertTriangle, RefreshCw } from 'lucide-react'; +import { Search, Download, Filter, BookOpen, FileText, ScrollText, BookMarked, ChevronRight, ArrowLeft, ExternalLink, Code, Globe, GitBranch, Cloud, Palette, Shield, DollarSign, BarChart3, Users, Megaphone, TrendingUp, UserCheck, ClipboardList, ShoppingCart, Cpu, Activity, LayoutGrid, Layers, Zap, Settings, Gauge, Radio, Wifi, Bot, Sun, Wrench, Binary, BatteryCharging, CircuitBoard, ShieldCheck, BrainCircuit, FlaskConical, Lock, Terminal, Dna, Microscope, Sparkles, Smartphone, Monitor, Server, CheckCircle2, Database, Briefcase, AlertTriangle, RefreshCw, Ticket, Award, QrCode } from 'lucide-react'; import SectionTitle from '@/components/SectionTitle/SectionTitle'; const MOODLE_URL = 'http://182.74.17.142/moodle/login/index.php'; +const GATE_PASS_URL = 'http://182.74.17.142/gatepass/login'; +const PROFICIENCY_URL = 'http://182.74.17.142/proficiency/login'; import { getBackendUrl } from '@/lib/utils'; import { StaggerContainer, StaggerItem } from '@/components/AnimatedContainer/AnimatedContainer'; import { TOOLKIT_ITEMS, DEPARTMENTS } from '@/constants'; @@ -1329,6 +1331,7 @@ export default function Notes() { const [selectedCategory, setSelectedCategory] = useState(null); const [selectedLanguage, setSelectedLanguage] = useState(null); const [selectedTool, setSelectedTool] = useState<{ name: string; desc: string; url: string; category: string; bg: string; color: string } | null>(null); + const [activePortalTab, setActivePortalTab] = useState<'moodle' | 'gatepass' | 'proficiency'>('moodle'); const [notes, setNotes] = useState([]); @@ -1363,6 +1366,10 @@ export default function Notes() { }, []); useEffect(() => { + const portalParam = searchParams.get('portal'); + if (portalParam === 'gatepass' || portalParam === 'proficiency' || portalParam === 'moodle') { + setActivePortalTab(portalParam as any); + } if (searchParams.get('section') === 'toolkit') { setTimeout(() => { toolkitRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' }); @@ -1919,114 +1926,304 @@ export default function Notes() { ) : (
- {/* Moodle Academic Portal Hero Hub */} - - {/* Subtle Decorative Background Glow */} -
-
-
- {/* Header Badge */} -
- - Official RIT Learning Management System -
- {/* Main Heading */} -

- Access Academic Notes & Study Materials on{' '} - - Moodle - -

+ {/* 1. MOODLE LMS CARD */} + {activePortalTab === 'moodle' && ( + +
+
-

- All official semester notes, previous year question papers (PYQs), syllabus data, and lab manuals are hosted directly on the official Rajalakshmi Institute of Technology Moodle server. -

- - {/* Primary Launch Action Buttons */} -
- - - Launch Official RIT Moodle Portal - - - -
- - {/* Feature Highlights Grid */} -
-
-
- +
+
+ + Official RIT Learning Management System
-
- 100% Direct & Secure + +

+ Access Academic Notes & Study Materials on{' '} + + Moodle + +

+ +

+ All official semester notes, previous year question papers (PYQs), syllabus data, and lab manuals are hosted directly on the official Rajalakshmi Institute of Technology Moodle server. +

+ +
+ + + Launch Official RIT Moodle Portal + + +
-
- Authenticates directly on official college server 182.74.17.142. + +
+
+
+ +
+
+ 100% Direct & Secure +
+
+ Authenticates directly on official college server 182.74.17.142. +
+
+ +
+
+ +
+
+ Official Semester Notes +
+
+ Complete 1st to 8th Semester course notes, PYQs, and assignments. +
+
+ +
+
+ +
+
+ Student Login +
+
+ Log in using your RIT Register Number and official Moodle password. +
+
+ + )} -
-
- + {/* 2. STUDENT GATE PASS CARD */} + {activePortalTab === 'gatepass' && ( + +
+
+ +
+
+ + Official RIT Campus Gate Pass Portal
-
- Official Semester Notes + +

+ Request & Manage Out-Passes on{' '} + + Student Gate Pass + +

+ +

+ Official digital campus out-pass system for day scholars and hostellers. Submit leave requests, track warden approvals, and present digital QR passes to campus security. +

+ +
+ + +
-
- Complete 1st to 8th Semester course notes, PYQs, and assignments. + +
+
+
+ +
+
+ Digital QR Clearance +
+
+ Generate real-time encrypted QR code for security verification at campus gates. +
+
+ +
+
+ +
+
+ Warden & Parent Approval +
+
+ Automated SMS and email notifications to wardens, mentors, and registered guardians. +
+
+ +
+
+ +
+
+ Verified RIT Student ID +
+
+ Authenticates securely with official college Roll Number & registered portal password. +
+
+ + )} -
-
- + {/* 3. STUDENT PROFICIENCY CARD */} + {activePortalTab === 'proficiency' && ( + +
+
+ +
+
+ + Official RIT Skill Evaluation & Readiness System
-
- Student Login + +

+ Track Skill Milestones & Credentials on{' '} + + Student Proficiency + +

+ +

+ Official RIT skill evaluation platform for tracking domain competencies, technical certifications, placement readiness scores, and verified proficiency badges. +

+ +
+ + +
-
- Log in using your RIT Register Number and official Moodle password. + +
+
+
+ +
+
+ Skill Radar & Domain Scores +
+
+ Visualize competency scores across programming, core engineering, and analytical reasoning. +
+
+ +
+
+ +
+
+ Placement Readiness +
+
+ Live feedback on mock interview performances, coding assessments, and company cutoffs. +
+
+ +
+
+ +
+
+ Verified Credentials +
+
+ Upload, verify, and generate shareable badges for NPTEL, Coursera & RIT certification credits. +
+
-
- - {/* Technical Security Note */} -
- ℹ️ Security Note: To protect student session privacy and prevent clickjacking attacks, RIT's Moodle server enforces opening the portal directly in a secure browser tab rather than inside third-party frames (X-Frame-Options: SAMEORIGIN). -
-
- + + )} +
-
- )} + )}
); diff --git a/src/pages/Toolkit/Toolkit.tsx b/src/pages/Toolkit/Toolkit.tsx index 3f30bb9..64afbe0 100644 --- a/src/pages/Toolkit/Toolkit.tsx +++ b/src/pages/Toolkit/Toolkit.tsx @@ -1404,6 +1404,65 @@ export default function Toolkit() { {TOOLKIT_ITEMS.map((item) => { + if (item.title === 'GPA and internal calculator') { + return ( + + setSelectedToolkit('gpa')} + whileHover={{ y: -4, boxShadow: '0 20px 40px -12px rgba(239,68,68,0.22)' }} + className="relative w-full p-7 md:p-8 bg-gradient-to-r from-[#FFF7ED] via-[#FEF2F2] to-[#FFF1F2] rounded-[26px] border-2 border-[#FECACA] hover:border-[#FCA5A5] cursor-pointer group transition-all shadow-md hover:shadow-xl overflow-hidden flex flex-col md:flex-row items-start md:items-center justify-between gap-6" + > + {/* Top Gradient Bar */} +
+ +
+
+ +
+ +
+
+ + POPULAR UTILITY + + + RIT Regulations + +
+ +

+ GPA, CGPA & Internal Marks Calculator +

+ +

+ Calculate your semester GPA, overall CGPA, and internal assessment marks based on official department course regulations and grade points. +

+ +
+ + Semester GPA + + + Cumulative CGPA + + + Internal Score + +
+
+
+ +
+ +
+ + + ); + } + const iconConfig = TOOLKIT_ICONS[item.title] || { icon: Code, bg: '#FFF7ED', color: '#F97316' }; const IconComponent = iconConfig.icon; return ( @@ -1422,8 +1481,6 @@ export default function Toolkit() { setSelectedToolkit('ai'); } else if (item.title === 'Biotech tools') { setSelectedToolkit('biotech'); - } else if (item.title === 'GPA and internal calculator') { - setSelectedToolkit('gpa'); } else if (item.url && item.url !== '#') { window.open(item.url, '_blank'); }