From 75625c47e51d2b81f39aacde59f225862dbb37cc Mon Sep 17 00:00:00 2001 From: rbhavesh1525 <129406732+rbhavesh1525@users.noreply.github.com> Date: Tue, 28 Jan 2025 19:05:29 +0530 Subject: [PATCH 01/13] checking user role --- src/Pages/Signin-page.jsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/Pages/Signin-page.jsx b/src/Pages/Signin-page.jsx index 2a43ecb..2b76f7c 100644 --- a/src/Pages/Signin-page.jsx +++ b/src/Pages/Signin-page.jsx @@ -46,8 +46,19 @@ const Signin = ({ onSwitchToSignup }) => { await storeTokenInLocalStorage(token); await storeUserId(user.id); await storeUsername(user.name); + console.log(`response :- ${response.data.user}`); + console.log(`response :- ${JSON.stringify(response.data.user)}`); + + + + + if(user.role ==='hr'){ + navigate("/hrhomepage"); + } + const isAdminValue = Boolean(user.isAdmin); console.log("Converting isAdmin to boolean:", isAdminValue); + await storeIsAdminState(isAdminValue); setIsLoggedIn(true); setIsLoading(false); From 869c543ab984ae7d76b8fb5e65ef7c6939fad4b2 Mon Sep 17 00:00:00 2001 From: Deydeepya Date: Mon, 27 Jan 2025 20:34:31 +0300 Subject: [PATCH 02/13] removal of top-header in log in and sign up pages... --- src/Pages/Signin-page.jsx | 3 +-- src/Pages/Signup-page.jsx | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Pages/Signin-page.jsx b/src/Pages/Signin-page.jsx index 2b76f7c..35bb0e2 100644 --- a/src/Pages/Signin-page.jsx +++ b/src/Pages/Signin-page.jsx @@ -1,7 +1,6 @@ /* eslint-disable no-unused-vars */ /* eslint-disable react/prop-types */ import React, { useState } from "react"; -import { TopNavbar, Footer } from "@/Components/compIndex"; import { Mail, Lock, LogIn } from "lucide-react"; import { useNavigate } from "react-router-dom"; import { toast } from "react-hot-toast"; @@ -91,7 +90,7 @@ const Signin = ({ onSwitchToSignup }) => { return ( <> - +
diff --git a/src/Pages/Signup-page.jsx b/src/Pages/Signup-page.jsx index 8dbffe8..dcd989a 100644 --- a/src/Pages/Signup-page.jsx +++ b/src/Pages/Signup-page.jsx @@ -1,5 +1,4 @@ import { useState } from "react"; -import { TopNavbar, Footer } from "@/Components/compIndex"; import { Mail, Lock, UserPlus, Phone } from "lucide-react"; import toast from "react-hot-toast"; import axios from "axios"; @@ -85,7 +84,6 @@ const SignUp = ({ onSwitchToSignin }) => { // verify redirect issue return ( <> -
From 60a5c9211f94ea7f375ab96e38fd87fa208e7cfc Mon Sep 17 00:00:00 2001 From: BlueStorm02 Date: Thu, 30 Jan 2025 03:53:30 +0530 Subject: [PATCH 03/13] null --- src/Pages/IntroPage.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Pages/IntroPage.jsx b/src/Pages/IntroPage.jsx index 4c2d17d..04f7c30 100644 --- a/src/Pages/IntroPage.jsx +++ b/src/Pages/IntroPage.jsx @@ -432,4 +432,6 @@ const Notifications = () => { ); }; -export default Notifications; \ No newline at end of file +export default Notifications; + +// worng page \ No newline at end of file From 346f7b4a2f9da394d5f94713cbbc71563c5b823c Mon Sep 17 00:00:00 2001 From: Viral Vaghela Date: Wed, 29 Jan 2025 18:37:46 +0530 Subject: [PATCH 04/13] Fixed Langin Page. & fix - routes --- src/Pages/Home.jsx | 20 +- src/Pages/IntroPage.jsx | 730 +++++++++++++++++----------------------- 2 files changed, 324 insertions(+), 426 deletions(-) diff --git a/src/Pages/Home.jsx b/src/Pages/Home.jsx index b58dd4a..eb809e7 100644 --- a/src/Pages/Home.jsx +++ b/src/Pages/Home.jsx @@ -5,25 +5,21 @@ import { useAuthContext } from "@/context/AuthContext"; import { IntroPage } from "./pageIndex"; const Home = () => { - const { loggedIn } = useAuthContext(); // Get the logged-in status from AuthContext + const { loggedIn } = useAuthContext(); return ( <> - - {loggedIn ? ( -
- {/* Sidebar */} + <> + - {/* Dashboard */} -
- -
-
+ + ) : ( - + <> + + )} -
); }; diff --git a/src/Pages/IntroPage.jsx b/src/Pages/IntroPage.jsx index 04f7c30..8aa333d 100644 --- a/src/Pages/IntroPage.jsx +++ b/src/Pages/IntroPage.jsx @@ -1,437 +1,339 @@ -import { useState, useEffect } from "react"; -import { Card, CardContent, CardHeader, CardTitle } from "@/Components/ui/card"; -import { Skeleton } from "@/Components/ui/skeleton"; -import { AlertCircle, Bell, Calendar, Trash, Clock, Info } from "lucide-react"; -import { Alert, AlertDescription } from "@/Components/ui/alert"; -import { Navbar, SideNav, Footer } from "@/Components/compIndex"; +import React from "react"; import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, -} from "@/Components/ui/dialog"; -import { Badge } from "@/Components/ui/badge"; -import { useAuthContext } from "@/context/AuthContext"; -import axios from "axios"; -import toast from "react-hot-toast"; -import { useAppContext } from "@/context/AppContext"; + GraduationCap, + Users, + Target, + BookOpen, + TrendingUp, + Award, + Linkedin, + Twitter, + Facebook, + Instagram, + Youtube, +} from "lucide-react"; +import { motion } from "framer-motion"; +import { useNavigate } from "react-router-dom"; -const Notifications = () => { - const [notifications, setNotifications] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const [selectedNotification, setSelectedNotification] = useState(null); - const [taskDetails, setTaskDetails] = useState(null); - const [isModalOpen, setIsModalOpen] = useState(false); - const { loggedIn } = useAuthContext(); - const { setNotiCounter } = useAppContext(); - - useEffect(() => { - const fetchNotifications = async () => { - const userId = localStorage.getItem("userId"); - try { - const response = await fetch( - `${import.meta.env.VITE_BASE_URL}/get-notifications?userId=${userId}` - ); - if (!response.ok) throw new Error("Failed to fetch notifications"); - const data = await response.json(); - if (data?.notifications?.notifications) { - const sortedNotifications = data.notifications.notifications.sort( - (a, b) => new Date(b.createdAt) - new Date(a.createdAt) - ); - setNotifications(sortedNotifications); - } else { - setError("No notifications found"); - } - } catch (error) { - setError(error.message); - } finally { - setLoading(false); - } - }; - - if (loggedIn) fetchNotifications(); - else setLoading(false); - }, [loggedIn]); - - const fetchTaskDetails = async (taskId) => { - try { - const response = await fetch( - `${import.meta.env.VITE_BASE_URL}/task/get-task/${taskId}` - ); - if (!response.ok) throw new Error("Failed to fetch task details"); - const data = await response.json(); - if (data.taskDetails) { - setTaskDetails(data.taskDetails); - } - } catch (error) { - console.error("Error fetching task details:", error); - setTaskDetails(null); - } - }; - - const formatDate = (dateString) => { - if (!dateString) return ""; - const date = new Date(dateString); - return new Intl.DateTimeFormat("en-US", { - weekday: "long", - year: "numeric", - month: "long", - day: "numeric", - hour: "numeric", - minute: "numeric", - }).format(date); - }; - - //////////////////////////////// - // // - // TIMINGS AGO // - // // - //////////////////////////////// - - const getTimeAgo = (dateString) => { - const now = new Date(); - const past = new Date(dateString); - const diffInSeconds = Math.floor((now - past) / 1000); - - if (diffInSeconds < 60) return "Just now"; - if (diffInSeconds < 3600) return `${Math.floor(diffInSeconds / 60)}m ago`; - if (diffInSeconds < 86400) - return `${Math.floor(diffInSeconds / 3600)}h ago`; - return `${Math.floor(diffInSeconds / 86400)}d ago`; - }; - - const handleNotificationClick = async (notification) => { - setSelectedNotification(notification); - setIsModalOpen(true); - - // Only fetch task details if task exists - if (notification.task) { - setTaskDetails(null); // Reset previous details - await fetchTaskDetails(notification.task); - } - }; - - const getNotificationTypeStyles = (type) => { - const types = { - update: "bg-blue-100 text-blue-800", - alert: "bg-red-100 text-red-800", - reminder: "bg-yellow-100 text-yellow-800", - success: "bg-green-100 text-green-800", - default: "bg-gray-100 text-gray-800", - }; - return types[type?.toLowerCase()] || types.default; - }; - - const renderNotificationSkeleton = () => ( -
- {[1, 2, 3].map((index) => ( -
-
- -
- - - -
-
+const IntroPage = () => { + return ( +
+ {/* Hero Section */} +
+ {/* Logo */} +
+ IISPPR Logo
- ))} -
- ); - - //////////////////////////////// - // // - // Notification with tasks // - // // - //////////////////////////////// - const renderTaskDetails = () => ( -
-
-
-

- {taskDetails.title} -

- + - {taskDetails.status} - + Empower Your Future with
+ + IISPPR Internships + + + + Pioneering Excellence in Research & Development
+ Through Impactful, Structured Internships. +
+ + +
+ -

- {taskDetails.description || "No description available."} -

- -
-
-
-
- -
-
-

Start Date

-

- {formatDate(taskDetails.startDate)} -

-
-
+ {/* Stats Section */} +
+
+
+ + Our Achievements + +

+ Trusted by 1000+ Students +

+

+ Join 1000+ of learners around the globe who trust our platform to + achieve their educational goals and build their future. +

-
-
-
- -
-
-

End Date

-

- {formatDate(taskDetails.endDate)} -

-
-
+
+ {[ + { number: "2,800", label: "Students Enrolled" }, + { number: "4M+", label: "Views on YouTube" }, + { number: "1,200+", label: "Hours of Content" }, + { number: "95%", label: "Satisfaction Rate" }, + ].map((stat, index) => ( + +

+ {stat.number} +

+

{stat.label}

+
+ ))}
-
-
- ); - - //////////////////////////////// - // // - // Notification without tasks // - // // - //////////////////////////////// - - const renderSimpleNotification = () => ( -
-
- - {selectedNotification?.type || "Update"} - -
- - {getTimeAgo(selectedNotification?.createdAt)} -
-
-

- {selectedNotification?.message} -

- {selectedNotification?.description && ( -

- {selectedNotification.description} -

- )} -

- {formatDate(selectedNotification?.createdAt)} -

-
- ); + - //////////////////////////////// - // // - // DELETE NOTIFICATION // - // // - //////////////////////////////// - - const deleteNoti = async (noteId,e) => { - if (e) { - e.stopPropagation(); - } - const token = localStorage.getItem("token"); - const userId = localStorage.getItem("userId"); - try { - const repsonse = await axios.delete( - `${import.meta.env.VITE_BASE_URL}/delete-notification/?notificationId=${noteId}&userId=${userId}`, - { - headers: { - Authorization: `Bearer ${token}`, - }, - } - ); - if (repsonse.status === 200) { - toast.success("Notification deleted"); - setIsModalOpen(false); - const updatedNotifications = notifications.filter( - (note) => note._id !== noteId - ); - setNotifications(updatedNotifications); - setNotiCounter(updatedNotifications.length); - - } - } catch (error) { - console.error("Error deleting notification:", error); - toast.error("Failed to delete notification"); - } - }; - - return ( - <> - - -
-
-
- - -
- -
- -
- Notifications Center -
- {notifications.length > 0 && ( - - {notifications.length} New - - )} + {/* Features Grid */} +
+
+
+
+ + + + + Research Excellence + +
+

+ Become a Research Leader +

+

+ Connect with fellow researchers, share insights, and participate + in groundbreaking studies. Enjoy comprehensive training and the + opportunity to make real impact! +

+
+
+ {features.map((feature, index) => ( + +
+ {React.cloneElement(feature.icon, { + className: "w-6 h-6 text-[#4F46E5]", + })}
- - - {!loggedIn && ( - - - - Please log in to view your notifications - - - )} - - {loading && renderNotificationSkeleton()} - - {error && ( - - - - {error} - - - )} - - {!loading && !error && notifications.length === 0 && ( -
-
-
- -
-
-

- No notifications available -

-

- Check back later for updates -

-
- )} +

+ {feature.title} +

+

{feature.description}

+
+ ))} +
+
+
- {!loading && !error && notifications.length > 0 && ( -
- {notifications.map((notification) => ( -
-
-
handleNotificationClick(notification)}> -
- - {notification.type || "Update"} - -
- - {getTimeAgo(notification.createdAt)} -
-
-

- {notification.message} -

- {notification.description && ( -

- {notification.description} -

- )} -

- {formatDate(notification.createdAt)} -

-
- -
-
- - ))} -
- )} - - + {/* Why Join Section */} +
+
+

+ WHY YOU SHOULD JOIN IISPPR? +

+
+ {whyJoinReasons.map((reason, index) => ( + +

+ {reason.title} +

+
+

+ {reason.description} +

+
+ ))}
-
+ - - - - - {selectedNotification?.task - ? "Notification Details" - : "Notification Details"} - - + {/* Footer */} +
+
+
+
+
+
II
+ IISPPR +
+

+ International Institute of SDGs and Public Policy Research + specializes in Research and Development. Our major work includes + comprehensive baselines and impactful research initiatives. +

+
+ {[ + { + icon: , + href: "https://www.linkedin.com/company/international-institute-of-sdg-s-and-public-policy-research/", + hoverColor: "hover:text-[#0077B5]", + }, + { + icon: , + href: "https://twitter.com/iispp_research", + hoverColor: "hover:text-[#1DA1F2]", + }, + { + icon: , + href: "https://www.facebook.com", + hoverColor: "hover:text-[#4267B2]", + }, + { + icon: , + href: "https://www.instagram.com/iisppr/?hl=en", + hoverColor: "hover:text-[#E4405F]", + }, + { + icon: , + href: "https://www.youtube.com/@iisppr", + hoverColor: "hover:text-[#FF0000]", + }, + ].map((social, index) => ( + + {social.icon} + + ))} +
+
-
- {selectedNotification?.task ? ( - taskDetails ? ( - renderTaskDetails() - ) : ( -
-

- No additional details available. -

-
- ) - ) : ( - renderSimpleNotification() - )} +
+

Contact Us

+
+

Office No. 30 Nihad Plaza, Opposite

+

Zakir Hussain School, Civil lines, Near

+

AMU, Aligarh 202001

+

+918279616047

+

iisspresearch@gmail.com

+
+
+
+

Quick Links

+
    + {["Home", "About Us", "Contact", "Internships"].map((link) => ( +
  • + + {link} + +
  • + ))} +
+
+
+

Legal

+
    + {[ + "Terms & Conditions", + "Privacy Policy", + "Disclaimer", + "Refund Policy", + ].map((link) => ( +
  • + + {link} + +
  • + ))} +
+
-
- +
+

+ ©️ 2025 International Institute Of SDGS & Public Policy Research. + All rights reserved. +

- - -
- -
- +
+
+
); }; -export default Notifications; +const features = [ + { + icon: , + title: "Research Excellence", + description: "Participate in groundbreaking research and win recognition", + }, + { + icon: , + title: "Build Community", + description: "Connect with fellow researchers and expand your network", + }, + { + icon: , + title: "Focused Learning", + description: "Access specialized training and mentorship programs", + }, + { + icon: , + title: "Knowledge Sharing", + description: "Share insights and learn from industry experts", + }, + { + icon: , + title: "Career Growth", + description: "Develop skills that advance your professional journey", + }, + { + icon: , + title: "Leadership Development", + description: "Build leadership capabilities through hands-on experience", + }, +]; + +const whyJoinReasons = [ + { + title: "Potential Growth", + description: + "IISPPR contributes to an individual's potential growth by providing access to innovative research studies, comprehensive knowledge, and networking opportunities. It focuses on evidence-based research and policy analysis which helps in the development and execution of policies that promote social, economic, and environmental well-being.", + }, + { + title: "Enhancing Career Opportunities in Research", + description: + "Through its comprehensive and multidisciplinary public policy training, the International Institute of SDGs and Public Policy Research provides a unique platform for boosting career opportunities in research. New approaches to data analysis techniques, policy creation frameworks, and research methodologies are made available to participants.", + }, + { + title: "Flexible learning environment", + description: + "IISPPR has a flexible learning environment for fostering creativity and adaptability. It offers a variety of internships, fieldwork, research development courses, and publication opportunities to promote a dynamic learning environment.", + }, + { + title: "Learn the Policy Issue", + description: + "IISPPR provides a comprehensive framework for public policy and sustainable development goals SDGs that address complex global policy issues. Discussions on public policies, international policies, and treaties are conducted to emphasize a thorough understanding of the policy issues.", + }, +]; -// worng page \ No newline at end of file +export default IntroPage; From c0ab1c05f36ff20244664886ce44f86114832413 Mon Sep 17 00:00:00 2001 From: Viral Vaghela Date: Wed, 29 Jan 2025 19:04:54 +0530 Subject: [PATCH 05/13] Refactor AskHR route and update color scheme in IntroPage --- src/App.jsx | 4 ++-- src/Components/SideNav.jsx | 2 +- src/Pages/IntroPage.jsx | 20 ++++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index bcda7bb..191969e 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -204,14 +204,14 @@ const App = () => { } /> - } - /> + /> */} { { id: 2, name: "Report", icon: "bi-bar-chart" }, { id: 3, name: "Setting", icon: "bi-gear" }, { id: 4, name: "Help", icon: "bi-question-circle" }, - { id: 5, name: "AskHR", icon: "bi-question-circle" }, + // { id: 5, name: "AskHR", icon: "bi-question-circle" }, ]; const redirectURLs = ["", "projects", "reports", "Setting", "help", "AskHR"]; diff --git a/src/Pages/IntroPage.jsx b/src/Pages/IntroPage.jsx index 8aa333d..a33177c 100644 --- a/src/Pages/IntroPage.jsx +++ b/src/Pages/IntroPage.jsx @@ -19,7 +19,7 @@ const IntroPage = () => { return (
{/* Hero Section */} -
+
{/* Logo */}
{ className="flex flex-wrap justify-center gap-4" >
+ {/* Bio/Introduction Section */} +
+
+ + About IISPPR + + + International Institute of SDGs and Public Policy Research specializes in Research and Development. + Our major work includes comprehensive baselines studies concerning Education and Development. Our + dedicated experts include researchers, policy analysts, educationists, and professionals from varied + backgrounds. With their combined knowledge and experience, we aim to bring innovation and provide + evidence-based recommendations to governments, NGOs, and all other stakeholders. As an institute + dedicated to SDGs and public policy and affiliated with the Niti Ayog NGO Darpan portal, we prioritize + capacity building and knowledge sharing. + + + + By fostering collaboration and partnerships, we strive to create a network of change agents who can drive + sustainable development and make a lasting impact on society. We engage in activities such as writing articles, + publishing journals, and translating important research, all aimed at inspiring and pushing governments and + individuals toward developing policies beneficial for everyone. Our research spans across fields such as + biotechnology, content writing, graphic designing, human resources, journalism, and psychology. + + + + We also emphasize building within the framework of SDG Goal 4 - Quality Education. Our agenda is to provide + quality education to students, helping them develop essential skills and secure better employment opportunities. + Additionally, we focus on reconnecting children who lost access to education due to the pandemic, ensuring their + right to learn and grow. + + + + We believe in holistic development, including sustainability, gender equality, and humanitarian assistance. + Our efforts in gender equality focus on SDG Goal 5, where we provide training and work opportunities for women + to help them achieve financial independence and eradicate detrimental practices. Our research initiatives include + topics such as gender pay gaps, political shifts, and sustainable industrial policies. + + +
+ +
+
+
+ + {/* Stats Section */} -
+
From 35dc2d5273145cff97eaf72544258ac3f7dfe1f8 Mon Sep 17 00:00:00 2001 From: Viral Vaghela Date: Wed, 29 Jan 2025 18:37:46 +0530 Subject: [PATCH 07/13] Fixed Langin Page. & fix - routes --- src/Pages/IntroPage.jsx | 86 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 3 deletions(-) diff --git a/src/Pages/IntroPage.jsx b/src/Pages/IntroPage.jsx index 0937098..862a30c 100644 --- a/src/Pages/IntroPage.jsx +++ b/src/Pages/IntroPage.jsx @@ -1,4 +1,3 @@ -import React from "react"; import { GraduationCap, Users, @@ -248,6 +247,87 @@ const IntroPage = () => {
+ {/* Add Testimonials Section before the footer */} +
+
+
+
+ + + + + Student Testimonials + +
+

+ What Our Students Say +

+

+ Hear from our alumni about their experiences and success stories with IISPPR +

+
+ +
+ {testimonials.map((testimonial, index) => ( + +
+ {testimonial.name} +
+

{testimonial.name}

+

{testimonial.role}

+
+
+

"{testimonial.quote}"

+
+ {[...Array(5)].map((_, i) => ( + + ))} +
+
+ ))} +
+
+
+ +const testimonials = [ + { + name: "Sarah Johnson", + role: "Research Intern", + quote: "The mentorship and hands-on experience at IISPPR were invaluable. I gained practical research skills that helped me secure my dream position.", + rating: 5, + image: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=256&q=80" + }, + { + name: "Michael Chen", + role: "Policy Analyst", + quote: "IISPPR's comprehensive training in policy research and analysis gave me the foundation I needed to make meaningful contributions to public policy.", + rating: 5, + image: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=256&q=80" + }, + { + name: "Priya Patel", + role: "SDG Researcher", + quote: "The collaborative environment and exposure to diverse research areas helped me develop a holistic understanding of sustainable development.", + rating: 5, + image: "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=256&q=80" + } +]; + {/* Footer */}
@@ -295,7 +375,7 @@ const IntroPage = () => { href={social.href} target="_blank" rel="noopener noreferrer" - className={`w-6 h-6 text-[#94A3B8] ${social.hoverColor} transition-colors`} + className={w-6 h-6 text-[#94A3B8] ${social.hoverColor} transition-colors} > {social.icon} @@ -411,4 +491,4 @@ const whyJoinReasons = [ }, ]; -export default IntroPage; +export default IntroPage; \ No newline at end of file From adab9aca901e8472cc59bb89d9deb22549079f87 Mon Sep 17 00:00:00 2001 From: BlueStorm02 Date: Thu, 30 Jan 2025 04:18:43 +0530 Subject: [PATCH 08/13] sync --- src/Pages/IntroPage.jsx | 80 ----------------------------------------- 1 file changed, 80 deletions(-) diff --git a/src/Pages/IntroPage.jsx b/src/Pages/IntroPage.jsx index 862a30c..2b84e06 100644 --- a/src/Pages/IntroPage.jsx +++ b/src/Pages/IntroPage.jsx @@ -247,86 +247,6 @@ const IntroPage = () => {
- {/* Add Testimonials Section before the footer */} -
-
-
-
- - - - - Student Testimonials - -
-

- What Our Students Say -

-

- Hear from our alumni about their experiences and success stories with IISPPR -

-
- -
- {testimonials.map((testimonial, index) => ( - -
- {testimonial.name} -
-

{testimonial.name}

-

{testimonial.role}

-
-
-

"{testimonial.quote}"

-
- {[...Array(5)].map((_, i) => ( - - ))} -
-
- ))} -
-
-
- -const testimonials = [ - { - name: "Sarah Johnson", - role: "Research Intern", - quote: "The mentorship and hands-on experience at IISPPR were invaluable. I gained practical research skills that helped me secure my dream position.", - rating: 5, - image: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=256&q=80" - }, - { - name: "Michael Chen", - role: "Policy Analyst", - quote: "IISPPR's comprehensive training in policy research and analysis gave me the foundation I needed to make meaningful contributions to public policy.", - rating: 5, - image: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=256&q=80" - }, - { - name: "Priya Patel", - role: "SDG Researcher", - quote: "The collaborative environment and exposure to diverse research areas helped me develop a holistic understanding of sustainable development.", - rating: 5, - image: "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=256&q=80" - } -]; {/* Footer */}