diff --git a/package-lock.json b/package-lock.json index 7b4419a..840dccd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@radix-ui/react-navigation-menu": "^1.2.0", "@radix-ui/react-progress": "^1.1.0", "@radix-ui/react-scroll-area": "^1.1.0", + "@radix-ui/react-select": "^2.1.1", "@radix-ui/react-slot": "^1.1.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", @@ -107,6 +108,44 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.7" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.7" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", + "license": "MIT" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -495,6 +534,29 @@ } } }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", + "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-collapsible": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.0.tgz", @@ -753,6 +815,38 @@ } } }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-portal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", @@ -879,6 +973,49 @@ } } }, + "node_modules/@radix-ui/react-select": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.1.tgz", + "integrity": "sha512-8iRDfyLtzxlprOo9IicnzvpsO1wNCkuwzzCM+Z5Rb5tNOpCdMvcc2AkzX0Fz+Tz9v6NJ5B/7EEgyZveo4FBRfQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.7" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -978,6 +1115,42 @@ } } }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-visually-hidden": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", @@ -1001,6 +1174,12 @@ } } }, + "node_modules/@radix-ui/rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" + }, "node_modules/@rushstack/eslint-patch": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", diff --git a/package.json b/package.json index b316cc4..d1c1bd3 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@radix-ui/react-navigation-menu": "^1.2.0", "@radix-ui/react-progress": "^1.1.0", "@radix-ui/react-scroll-area": "^1.1.0", + "@radix-ui/react-select": "^2.1.1", "@radix-ui/react-slot": "^1.1.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", diff --git a/public/bits.png b/public/bits.png new file mode 100644 index 0000000..4e1c655 Binary files /dev/null and b/public/bits.png differ diff --git a/public/dashboard-preview.png b/public/dashboard-preview.png new file mode 100644 index 0000000..8004cfc Binary files /dev/null and b/public/dashboard-preview.png differ diff --git a/requirements/dashboard.png b/requirements/dashboard.png new file mode 100644 index 0000000..379ead5 Binary files /dev/null and b/requirements/dashboard.png differ diff --git a/requirements/frontend_instructions.md b/requirements/frontend_instructions.md new file mode 100644 index 0000000..014cb83 --- /dev/null +++ b/requirements/frontend_instructions.md @@ -0,0 +1,79 @@ +## Project Requirements for Unidash: A University Portal Aggregator + +### 1. Overview +Unidash is a web application designed to consolidate the university portals and websites of BITS Pilani Dubai Campus into a single, accessible platform. Users will be able to easily navigate and find the information they need from various portals embedded in the application. + +### 2. Features +* **Landing Page:** + * Simple and intuitive interface (as provided in the image) + * A dashboard page with all the embedded portals + * An attendance tracker page which allows students to track their attendance for a their courses, students will have to login using their GMAIL ID +* **User Authentication:** + * Optional user registration and login features + * Allow users to create profiles and save preferences +* **Mobile Responsiveness:** + * The application should be fully responsive and accessible on various devices, including smartphones and tablets +* **Website Link:** + { title: 'BITS ERP', url: 'https://erp.bits-pilani.ac.in/', description: 'The main website for registration, academic progress, and grading' }, + { title: 'LMS', url: 'https://lms.bitspilanidubai.ae/', description: 'A website for coursework management, assessments, and coursework resources' }, + { title: 'Uni Notes', url: 'https://uni-notes.netlify.app/', description: 'Find information across courses and their respective notes, contributed by individual students' }, + { title: 'Google DSC Resources', url: 'https://gdscbpdc.github.io/', description: 'Find information of technical workshops and events conducted by Google DSC BPDC' }, + { title: 'ACM lib Resources', url: 'https://openlib-cs.acmbpdc.org/', description: 'A library of resources provided by ACM BPDC' }, + +### 3. Technology Stack +* **Frontend:** + * Tailwind CSS for styling + * NextJs + +### 4. Design and User Experience +* Adhere to the provided landing page design or create a new design that aligns with the application's purpose +* Ensure a user-friendly and intuitive interface +* Prioritize accessibility and inclusivity in the design +* Optimize for performance and load times + +### 5. Development and Deployment +* Follow a structured development methodology (e.g., Agile) +* Implement version control (e.g., Git) +* Conduct thorough testing (unit, integration, and end-to-end) +* Deploy the application to a suitable hosting environment + +### 6. Maintenance and Updates +* Establish a maintenance plan for regular updates and bug fixes +* Monitor user feedback and implement necessary improvements +* Consider future features and enhancements to expand the application's capabilities + +### 7. File Structure +MY-APP +├── next +├── node_modules +├── public +├── requirements +├── src +│ └── app +│ ├── favicon.ico +│ ├── globals.css +│ ├── layout.tsx +│ ├── page.tsx +│ └── components +│ ├── magicui +│ │ └── dot-pattern.tsx +│ └── ui +│ ├── About.tsx +│ ├── AttendanceTracker.tsx +│ ├── Dashboard.tsx +│ └── HomePage.tsx +├── lib +├── bits.png +├── .eslintrc.json +├── .gitignore +├── components.json +├── next-env.d.ts +├── next.config.mjs +├── package-lock.json +├── package.json +├── postcss.config.mjs +├── README.md +├── tailwind.config.ts +└── tsconfig.json + +**Note:** This is a basic requirements document. The specific implementation details may vary depending on the complexity of the project and the chosen technologies. It's important to refine and expand these requirements as the project progresses. diff --git a/requirements/homepage.png b/requirements/homepage.png new file mode 100644 index 0000000..8004cfc Binary files /dev/null and b/requirements/homepage.png differ diff --git a/src/app/components/MainContent.tsx b/src/app/components/MainContent.tsx new file mode 100644 index 0000000..4030fc7 --- /dev/null +++ b/src/app/components/MainContent.tsx @@ -0,0 +1,54 @@ +'use client' + +import { useState } from 'react' +import LandingPage from './ui/LandingPage' +import Dashboard from './ui/Dashboard' +import AttendanceTracker from './ui/AttendanceTracker' + +const MainContent = () => { + const [currentPage, setCurrentPage] = useState('landing') + + const handleEnter = () => { + setCurrentPage('dashboard') + } + + const handleAttendanceClick = () => { + setCurrentPage('attendance') + } + + const handleLogout = () => { + setCurrentPage('landing') + } + + const renderNavigation = () => ( + + ) + + return ( + <> + {currentPage === 'landing' && } + {currentPage !== 'landing' && ( + <> + {renderNavigation()} + {currentPage === 'dashboard' && ( + + )} + {currentPage === 'attendance' && } + + )} + + ) +} + +export default MainContent \ No newline at end of file diff --git a/src/app/components/ui/AttendanceTracker.tsx b/src/app/components/ui/AttendanceTracker.tsx new file mode 100644 index 0000000..ad94d17 --- /dev/null +++ b/src/app/components/ui/AttendanceTracker.tsx @@ -0,0 +1,134 @@ +'use client' + +import React, { useState } from 'react' +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" + +interface Course { + name: string; + attended: number; + total: number; +} + +const subjectOptions = [ + "Computer Networks", + "Database Systems", + "Operating Systems", + "Data Structures", + "Algorithms", + "Software Engineering", + "Web Development", + "Machine Learning", + "Artificial Intelligence", + "Cybersecurity", +] + +const AttendanceTracker = () => { + const [isLoggedIn, setIsLoggedIn] = useState(false) + const [courses, setCourses] = useState([]) + const [selectedSubject, setSelectedSubject] = useState("") + + const handleLogin = () => { + // Implement Google login logic here + setIsLoggedIn(true) + } + + const updateAttendance = (index: number, attended: number, total: number) => { + const updatedCourses = [...courses] + updatedCourses[index] = { ...updatedCourses[index], attended, total } + setCourses(updatedCourses) + } + + const addSubject = () => { + if (selectedSubject && !courses.some(course => course.name === selectedSubject)) { + setCourses([...courses, { name: selectedSubject, attended: 0, total: 48 }]) + setSelectedSubject("") + } + } + + if (!isLoggedIn) { + return ( +
+

Attendance Tracker

+

Please log in with your BITS Pilani Gmail ID to access the Attendance Tracker.

+ +
+ ) + } + + return ( +
+

Attendance Tracker

+
+ + +
+
+ {courses.map((course, index) => ( + + + {course.name} + Track your attendance for this course + + +
+
+ + updateAttendance(index, parseInt(e.target.value), course.total)} + className="w-20" + /> +
+
+ + updateAttendance(index, course.attended, parseInt(e.target.value))} + className="w-20" + /> +
+
+ Attendance: {course.total > 0 ? ((course.attended / course.total) * 100).toFixed(2) : 0}% +
+
+
+
+ ))} +
+
+ ) +} + +export default AttendanceTracker \ No newline at end of file diff --git a/src/app/components/ui/Dashboard.tsx b/src/app/components/ui/Dashboard.tsx new file mode 100644 index 0000000..1fcd132 --- /dev/null +++ b/src/app/components/ui/Dashboard.tsx @@ -0,0 +1,48 @@ +'use client' + +import React from 'react' +import Link from 'next/link' +import { Card, CardHeader, CardTitle, CardDescription } from "@/components/ui/card" +import { Button } from "@/components/ui/button" + +const portalLinks = [ + { title: 'BITS ERP', url: 'https://erp.bits-pilani.ac.in/', description: 'Registration, academic progress, and grading', color: 'bg-blue-100' }, + { title: 'LMS', url: 'https://lms.bitspilanidubai.ae/', description: 'Coursework management and resources', color: 'bg-green-100' }, + { title: 'Uni Notes', url: 'https://uni-notes.netlify.app/', description: 'Course notes contributed by students', color: 'bg-yellow-100' }, + { title: 'Google DSC Resources', url: 'https://gdscbpdc.github.io/', description: 'Technical workshops and events', color: 'bg-red-100' }, + { title: 'ACM lib Resources', url: 'https://openlib-cs.acmbpdc.org/', description: 'Library of resources by ACM BPDC', color: 'bg-purple-100' }, +] + +interface DashboardProps { + onAttendanceClick: () => void; + onLogout: () => void; +} + +const Dashboard: React.FC = ({ onAttendanceClick, onLogout }) => { + return ( +
+
+

Dashboard

+
+ {portalLinks.map((portal, index) => ( + + + {portal.title} + {portal.description} + +
+ +
+
+ ))} +
+
+
+ ) +} + +export default Dashboard \ No newline at end of file diff --git a/src/app/components/ui/HomePage.tsx b/src/app/components/ui/HomePage.tsx new file mode 100644 index 0000000..7fff3d4 --- /dev/null +++ b/src/app/components/ui/HomePage.tsx @@ -0,0 +1,65 @@ +'use client' + +import React from 'react' +import Image from 'next/image' + +const portalLinks = [ + { title: 'BITS ERP', url: 'https://erp.bits-pilani.ac.in/', description: 'The main website for registration, academic progress, and grading' }, + { title: 'LMS', url: 'https://lms.bitspilanidubai.ae/', description: 'A website for coursework management, assessments, and coursework resources' }, + { title: 'Uni Notes', url: 'https://uni-notes.netlify.app/', description: 'Find information across courses and their respective notes, contributed by individual students' }, + { title: 'Google DSC Resources', url: 'https://gdscbpdc.github.io/', description: 'Find information of technical workshops and events conducted by Google DSC BPDC' }, + { title: 'ACM lib Resources', url: 'https://openlib-cs.acmbpdc.org/', description: 'A library of resources provided by ACM BPDC' }, +] + +const HomePage = () => { + return ( +
+
+

Unidash

+

Your BITS Pilani Dubai Campus Portal Aggregator

+
+ +
+
+ + + + +
+
+ +

BITS Pilani Dubai Campus Portals

+
+ {portalLinks.map((portal, index) => ( + +

{portal.title}

+

{portal.description}

+
+ ))} +
+
+ ) +} + +export default HomePage \ No newline at end of file diff --git a/src/app/components/ui/LandingPage.tsx b/src/app/components/ui/LandingPage.tsx new file mode 100644 index 0000000..eab1ff3 --- /dev/null +++ b/src/app/components/ui/LandingPage.tsx @@ -0,0 +1,51 @@ +'use client' + +import React from 'react' +import Image from 'next/image' +import { Button } from "@/components/ui/button" + +interface LandingPageProps { + onEnter: () => void; +} + +const LandingPage: React.FC = ({ onEnter }) => { + return ( +
+ +
+
+ Student Council Logo + Backed by Student Council BITS Pilani Dubai Campus +
+

+ Access all your university tools and resources in one place. +

+

+ Quickly find info about course requirements, simplify resources navigation, be organized. Save four hours on your academic planning. +

+
+ + Join 1000+ faculty and students +
+
+
+ ) +} + +export default LandingPage \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx index 2d6e843..a18d83d 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,42 +1,9 @@ -"use client"; - -import { useState } from 'react'; -import HomePage from '@/components/HomePage'; -import Dashboard from '@/components/Dashboard'; -import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardHeader } from "@/components/ui/card"; -import Link from 'next/link'; -import AttendanceTracker from '@/components/AttendanceTracker'; // Import the existing component +import MainContent from './components/MainContent' export default function Home() { - const [showDashboard, setShowDashboard] = useState(false); - const [showAttendanceTracker, setShowAttendanceTracker] = useState(false); - - const renderNavigation = () => ( - - ); - - if (showAttendanceTracker) { - return setShowAttendanceTracker(false)} />; - } - - if (!showDashboard) { - return ( - setShowDashboard(true)} - navigation={renderNavigation()} - /> - ); - } - - return ; + return ( +
+ +
+ ) } \ No newline at end of file diff --git a/src/components/About.tsx b/src/components/About.tsx index 2889c30..6d85bdd 100644 --- a/src/components/About.tsx +++ b/src/components/About.tsx @@ -1,82 +1,26 @@ import React from 'react'; -import { Card, CardContent } from "@/components/ui/card"; -import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/components/ui/accordion"; -export default function About() { +const About = () => { return ( -
- {/* Left Sidebar */} - - - {/* Main Content */} -
-

About BITS Pilani Dubai Campus

- -
-

Our University

-

BITS Pilani Dubai Campus is a premier institution of higher education known for its excellence in engineering and technology. As part of the renowned BITS Pilani network, we offer world-class education with a focus on innovation and practical learning.

-
- -
-

Courses & Requirements

- - - Core Subjects and Electives - -
    -
  • Core Subjects: All core subjects must be completed by the end of the graduation program.
  • -
  • Humanities Electives: Three humanities electives are required.
  • -
  • Discipline Electives: Five discipline electives are required.
  • -
  • Open Electives: Five open electives are required.
  • -
-
-
- - Design Projects - -

It is recommended to incorporate more design projects starting in the second or third year to reduce workload in the fourth year.

-
-
- - Degree Programs - -
    -
  • B.E. Computer Science
  • -
  • B.E. Electrical and Electronics Engineering
  • -
  • B.E. Mechanical Engineering
  • -
  • B.E. Biotechnology
  • -
  • B.E. Software Systems
  • -
  • B.E. Microelectronics
  • -
  • Executive MBA
  • -
-
-
-
-
-
- - {/* Right Sidebar */} - +
+

About Unidash

+

+ Unidash is a web application designed to consolidate university portals and websites into a single, accessible platform. Our goal is to help students and faculty easily navigate and find the information they need from various universities. +

+

+ With Unidash, you can: +

+
    +
  • Search for specific universities or portals
  • +
  • Browse a comprehensive list of universities and their corresponding portals
  • +
  • Bookmark your favorite university portals for quick access
  • +
  • Create a personalized dashboard to display your bookmarked portals
  • +
+

+ We're committed to providing a user-friendly, intuitive, and responsive experience across all devices. If you have any questions or feedback, please don't hesitate to contact us. +

- ); + ) } + +export default About diff --git a/src/components/Dashboard.tsx b/src/components/Dashboard.tsx index 8d2d553..49198d2 100644 --- a/src/components/Dashboard.tsx +++ b/src/components/Dashboard.tsx @@ -1,6 +1,6 @@ import React from 'react'; -const webPages = [ +const portalLinks = [ { title: 'BITS ERP', url: 'https://erp.bits-pilani.ac.in/', description: 'The main website for registration, academic progress, and grading' }, { title: 'LMS', url: 'https://lms.bitspilanidubai.ae/', description: 'A website for coursework management, assessments, and coursework resources' }, { title: 'Uni Notes', url: 'https://uni-notes.netlify.app/', description: 'Find information across courses and their respective notes, contributed by individual students' }, @@ -8,28 +8,26 @@ const webPages = [ { title: 'ACM lib Resources', url: 'https://openlib-cs.acmbpdc.org/', description: 'A library of resources provided by ACM BPDC' }, ]; -function Dashboard() { - return ( -
-

All Web Pages

-
- {webPages.map((page, index) => ( -
-

{page.title}

-

{page.description}

-
-