diff --git a/package-lock.json b/package-lock.json index 608efd1..1985a21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6621,9 +6621,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001488", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001488.tgz", - "integrity": "sha512-NORIQuuL4xGpIy6iCCQGN4iFjlBXtfKWIenlUuyZJumLRIindLb7wXM+GO8erEhb7vXfcnf4BAg2PrSDN5TNLQ==", + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", "funding": [ { "type": "opencollective", @@ -6637,7 +6637,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -23520,9 +23521,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001488", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001488.tgz", - "integrity": "sha512-NORIQuuL4xGpIy6iCCQGN4iFjlBXtfKWIenlUuyZJumLRIindLb7wXM+GO8erEhb7vXfcnf4BAg2PrSDN5TNLQ==" + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==" }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", diff --git a/src/components/CurrentSponsorRow.tsx b/src/components/CurrentSponsorRow.tsx deleted file mode 100644 index c09090d..0000000 --- a/src/components/CurrentSponsorRow.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react' -import '../styles/sponsors.css'; -import texelArts from '../static/images/sponsor-images/texelArts.webp' -import texasRobotics from '../static/images/sponsor-images/texasRobotics.webp' -import serviceNow from '../static/images/sponsor-images/serviceNow.webp' -import CurrentSponsorCard from './CurrentSponsorCard'; -function CurrentSponsorRow() { - - return ( -
- - - -
- ) -} - -export default CurrentSponsorRow \ No newline at end of file diff --git a/src/components/ProjectCard.tsx b/src/components/ProjectCard.tsx deleted file mode 100644 index 1471e4a..0000000 --- a/src/components/ProjectCard.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react' -import '../styles/projectcard.css' - -interface Props { - img: string; - h2: string; -} - -function ProjectCard(props : Props) { - - const projectInfo = [ - - ]; - - return ( -
- -
-

{props.h2}

-
-
- -
-
- ) -} - -export default ProjectCard \ No newline at end of file diff --git a/src/components/OfficerCards.tsx b/src/components/about/OfficerCard.tsx similarity index 95% rename from src/components/OfficerCards.tsx rename to src/components/about/OfficerCard.tsx index 8b00447..2a63dd8 100644 --- a/src/components/OfficerCards.tsx +++ b/src/components/about/OfficerCard.tsx @@ -1,5 +1,5 @@ import React from 'react' -import '../styles/officerCard.css' +import '../../styles/about/officerCard.css' import { useState, useEffect } from 'react'; import {useRef} from 'react' import {useHover} from 'usehooks-ts' @@ -14,7 +14,7 @@ interface Props { } -function OfficerCards(props: Props) { +function OfficerCard(props: Props) { const [isDrawerOpen, setIsDrawerOpen] = useState(false) const [drawerClass, setDrawerClass] = useState('cardDrawerInvisible') @@ -92,4 +92,4 @@ function OfficerCards(props: Props) { ) } -export default OfficerCards +export default OfficerCard diff --git a/src/components/Mailer.tsx b/src/components/contact/Mailer.tsx similarity index 98% rename from src/components/Mailer.tsx rename to src/components/contact/Mailer.tsx index 003458e..0c8358b 100644 --- a/src/components/Mailer.tsx +++ b/src/components/contact/Mailer.tsx @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; import emailjs from '@emailjs/browser'; -import '../styles/mailer.css' -import ECLAIRButton from './ECLAIRButton'; +import '../../styles/mailer.css' +import ECLAIRButton from '../general/ECLAIRButton'; import { useState, useRef } from 'react'; import ReCAPTCHA from 'react-google-recaptcha'; diff --git a/src/components/ContactInformationContainer.tsx b/src/components/general/ContactInformationContainer.tsx similarity index 94% rename from src/components/ContactInformationContainer.tsx rename to src/components/general/ContactInformationContainer.tsx index 712e898..3b5a26a 100644 --- a/src/components/ContactInformationContainer.tsx +++ b/src/components/general/ContactInformationContainer.tsx @@ -1,5 +1,5 @@ import React from 'react' -import '../styles/sponsors.css'; +import '../../styles/sponsors/sponsors.css'; interface ContactInformationContainerProps { href?: string diff --git a/src/components/ECLAIRButton.tsx b/src/components/general/ECLAIRButton.tsx similarity index 55% rename from src/components/ECLAIRButton.tsx rename to src/components/general/ECLAIRButton.tsx index 12e8080..4837aff 100644 --- a/src/components/ECLAIRButton.tsx +++ b/src/components/general/ECLAIRButton.tsx @@ -1,5 +1,6 @@ import React, { useEffect } from 'react' -import '../styles/eclairbutton.css' +import '../../styles/eclairbutton.css' +import '../../styles/app.css'; interface Props { @@ -20,11 +21,13 @@ function ECLAIRButton(props: Props) { }, []) return ( - +
+ +
) } diff --git a/src/components/ImageSlider.tsx b/src/components/general/ImageSlider.tsx similarity index 85% rename from src/components/ImageSlider.tsx rename to src/components/general/ImageSlider.tsx index 25d05a4..9b7b262 100644 --- a/src/components/ImageSlider.tsx +++ b/src/components/general/ImageSlider.tsx @@ -4,12 +4,10 @@ import { FaArrowAltCircleRight, FaArrowAltCircleLeft } from 'react-icons/fa'; -interface Image { - image: string; -} + interface ImageSliderProps { - slides: Image[]; // Change the type of the 'slides' prop to be an array of objects with an 'image' property + slides: string[]; // Change the type of the 'slides' prop to be an array of objects with an 'image' property } const ImageSlider: FunctionComponent = ({ slides }) => { @@ -39,7 +37,7 @@ const ImageSlider: FunctionComponent = ({ slides }) => { key={index} > {index === current && ( - travel image + travel image )} ); diff --git a/src/components/JoinUs.tsx b/src/components/general/JoinUs.tsx similarity index 100% rename from src/components/JoinUs.tsx rename to src/components/general/JoinUs.tsx diff --git a/src/components/ImageProjectCard.tsx b/src/components/projects/ProjectCard.tsx similarity index 69% rename from src/components/ImageProjectCard.tsx rename to src/components/projects/ProjectCard.tsx index 41be4cb..8659345 100644 --- a/src/components/ImageProjectCard.tsx +++ b/src/components/projects/ProjectCard.tsx @@ -1,22 +1,17 @@ import React from 'react'; import {useState, useRef, forwardRef, useEffect} from 'react'; -import '../styles/imageprojectcard.css'; +import '../../styles/projects/projectcard.css'; interface Props { img: string; name: string; - lName : String; - members : String; - desc : String; - git : String; - gantt : String; - vid : string; + vid?: string; onOpenPopup : () => void; } -const ImageProjectCard = forwardRef((props : Props, ref) => { +const ProjectCard = forwardRef((props : Props, ref) => { const [imgLoaded, setImgLoaded] = useState(false); const videoRef = useRef(null); const [isHovering, setIsHovering] = useState(false); @@ -41,12 +36,10 @@ const ImageProjectCard = forwardRef((props : Props, ref)
Click to learn more!
- - {/* */} + {props.vid && } + ) }); -export default ImageProjectCard \ No newline at end of file +export default ProjectCard \ No newline at end of file diff --git a/src/components/projects/ProjectFilter.tsx b/src/components/projects/ProjectFilter.tsx new file mode 100644 index 0000000..e9a9834 --- /dev/null +++ b/src/components/projects/ProjectFilter.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import '../../styles/projects/projects.css'; + +interface ProjectFilterProps { + curFilter: string; + setCurFilter: (filters: string) => void; + handleResize: () => void; +} + +function ProjectFilter(props: ProjectFilterProps) { + //@ts-ignore + const handleFilterChange = (newFilters: string ) => { + props.handleResize(); + props.setCurFilter(newFilters); + console.log("Filter changed to: ", newFilters); + }; + + + return ( +
+
    +
  • handleFilterChange("inprogress")}>In-Progress
  • +
  • handleFilterChange("completed")}>Completed
  • +
  • handleFilterChange("all")}>All
  • +
+
+ ) +} + +export default ProjectFilter \ No newline at end of file diff --git a/src/components/Popup.tsx b/src/components/projects/ProjectPopup.tsx similarity index 92% rename from src/components/Popup.tsx rename to src/components/projects/ProjectPopup.tsx index 3c2f3c2..b4a6818 100644 --- a/src/components/Popup.tsx +++ b/src/components/projects/ProjectPopup.tsx @@ -1,11 +1,8 @@ import React, {useRef} from "react"; -import '../styles/popup.css'; +import '../../styles/projects/popup.css'; import styled, { keyframes } from 'styled-components'; -import ImageSlider from '../components/ImageSlider'; +import ImageSlider from '../general/ImageSlider'; -interface Image { - image: string; -} interface Props { cardInfo : { @@ -14,17 +11,17 @@ interface Props { name: string; lName: string; members ?: string; - desc: string; + desc ?: string; git ?: string; gantt ?: string; rect ?: DOMRect; - SliderData ?: Array; + SliderData ?: Array; } | null; onClose : () => void; vis : boolean; } -function Popup(props : Props) { +function ProjectPopup(props : Props) { const popupAnimation = (rect ?: DOMRect) => keyframes` 0% { transform: translateY(${ props.cardInfo!.rect!.top + 'px' }) translateX(calc(${props.cardInfo!.rect!.left}px - 50vw + 50%)); transform-origin: ${props.cardInfo!.rect!.left > (window.innerWidth * 0.6) ? 'right' : (props.cardInfo!.rect!.left < (window.innerWidth * 0.4) ? 'left' : '')} ${props.cardInfo!.rect!.top < (window.innerHeight * 0.3) ? 'top' : (props.cardInfo!.rect!.top > (window.innerHeight * 0.6) ? 'bottom' : '')}; scale: 0.1;} 100% { transform: translateY(0) translateX(0px); transform-origin: center; scale: 1;} @@ -53,7 +50,6 @@ function Popup(props : Props) {

{props.cardInfo!.name}

-

Contributors:

{/* {props.cardInfo!.lName} */} @@ -75,11 +71,11 @@ function Popup(props : Props) {

Purpose:

-
+ {props.cardInfo?.desc &&
{props.cardInfo!.desc} -
+
}
@@ -108,4 +104,4 @@ function Popup(props : Props) { ); } -export default Popup; \ No newline at end of file +export default ProjectPopup; \ No newline at end of file diff --git a/src/components/ImageSlideCard.tsx b/src/components/projects/ResourcesCard.tsx similarity index 56% rename from src/components/ImageSlideCard.tsx rename to src/components/projects/ResourcesCard.tsx index d5558a3..73b25c1 100644 --- a/src/components/ImageSlideCard.tsx +++ b/src/components/projects/ResourcesCard.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import {useState, useRef, forwardRef, useEffect} from 'react'; -import '../styles/imageslidecard.css'; +import {forwardRef} from 'react'; +import '../../styles/projects/resourcescard.css'; interface Props { @@ -12,7 +12,7 @@ interface Props { key: number; } -const ImageSlideCard = forwardRef((props : Props, ref) => { +const ResourcesCard = forwardRef((props : Props, ref) => { return (
@@ -22,12 +22,8 @@ const ImageSlideCard = forwardRef((props : Props, ref) =>
Click to view slides!
- {/* */} - {/* */} ) }); -export default ImageSlideCard \ No newline at end of file +export default ResourcesCard \ No newline at end of file diff --git a/src/components/CurrentSponsorCard.tsx b/src/components/sponsors/SponsorCard.tsx similarity index 62% rename from src/components/CurrentSponsorCard.tsx rename to src/components/sponsors/SponsorCard.tsx index 78f38ec..d44963b 100644 --- a/src/components/CurrentSponsorCard.tsx +++ b/src/components/sponsors/SponsorCard.tsx @@ -1,13 +1,13 @@ -import '../styles/sponsors.css' +import '../../styles/sponsors/sponsors.css' import React from 'react'; -interface CurrentSponsorCardProps { +interface SponsorCardProps { img: string, color: string, link: string, } -function CurrentSponsorCard(props: CurrentSponsorCardProps) { +function SponsorCard(props: SponsorCardProps) { return ( @@ -16,4 +16,4 @@ function CurrentSponsorCard(props: CurrentSponsorCardProps) { ) } -export default CurrentSponsorCard \ No newline at end of file +export default SponsorCard \ No newline at end of file diff --git a/src/components/SponsorPackage.tsx b/src/components/sponsors/SponsorPackage.tsx similarity index 100% rename from src/components/SponsorPackage.tsx rename to src/components/sponsors/SponsorPackage.tsx diff --git a/src/components/SponsorPackageRow.tsx b/src/components/sponsors/SponsorPackageRow.tsx similarity index 100% rename from src/components/SponsorPackageRow.tsx rename to src/components/sponsors/SponsorPackageRow.tsx diff --git a/src/components/sponsors/SponsorRow.tsx b/src/components/sponsors/SponsorRow.tsx new file mode 100644 index 0000000..33d18c5 --- /dev/null +++ b/src/components/sponsors/SponsorRow.tsx @@ -0,0 +1,17 @@ +import React from 'react' +import '../../styles/sponsors/sponsors.css'; +import texelArts from '../../static/images/sponsor-images/texelArts.webp' +import texasRobotics from '../../static/images/sponsor-images/texasRobotics.webp' +import serviceNow from '../../static/images/sponsor-images/serviceNow.webp' +import SponsorCard from './SponsorCard'; +function SponsorRow() { + return ( +
+ + + +
+ ) +} + +export default SponsorRow \ No newline at end of file diff --git a/src/pages/About.tsx b/src/pages/About.tsx index f3d52b0..1eb7aff 100644 --- a/src/pages/About.tsx +++ b/src/pages/About.tsx @@ -1,8 +1,8 @@ import React, {useState, useRef, useEffect} from 'react' import Grid from '@mui/material/Grid'; import Loader from '../components/Loader' -import OfficerCards from '../components/OfficerCards' -import '../styles/about.css' +import OfficerCard from '../components/about/OfficerCard' +import '../styles/about/about.css' import aboutUsBackground from '../static/vectors/about-us-background.svg' import foundersBackground from '../static/vectors/founders-background.svg' import foundersBackground2 from '../static/vectors/founders-background-2.svg' @@ -14,7 +14,7 @@ import { OFFICER_LINKED_INS, OFFICER_DESCS, OFFICER_FUN_IMAGES, - TECH_LEAD_KEYS, + CUR_TECH_LEAD_KEYS, TECH_LEAD_NAMES, TECH_LEAD_EMAILS, TECH_LEAD_LINKED_INS, @@ -28,7 +28,7 @@ import { import conradImg from '../static/images/officer/conrad.webp' import sahilImg from '../static/images/officer/sahil.webp' -import JoinUs from '../components/JoinUs'; +import JoinUs from '../components/general/JoinUs'; function About() { const [aBGLoaded, setABGLoaded] = useState(false); @@ -69,7 +69,7 @@ function About() { - +
{OFFICER_KEYS.map((key) => ( - -
@@ -111,14 +110,13 @@ function About() { }}>
- {TECH_LEAD_KEYS.map((key) => { - // remove trailing numbers from key + {CUR_TECH_LEAD_KEYS.map((key) => { const projectKey = key.replace(/[0-9]/g, ""); const projectName = PROJECT_NAMES[projectKey]; return ( - - - Our mission is to drive innovation in AI and robotics at the undergraduate level. -
- -
+ +
@@ -204,7 +203,7 @@ function Homepage() { }} >
Our Sponsors
- + diff --git a/src/pages/Projects.tsx b/src/pages/Projects.tsx index 3d529d4..9f3e0ed 100644 --- a/src/pages/Projects.tsx +++ b/src/pages/Projects.tsx @@ -1,43 +1,18 @@ import React from 'react'; import {useState, useRef, useEffect} from 'react'; -import '../styles/projects.css'; -import ImageProjectCard from '../components/ImageProjectCard'; -import ImageSlideCard from '../components/ImageSlideCard'; -import Popup from '../components/Popup'; +import '../styles/projects/projects.css'; +import ProjectCard from '../components/projects/ProjectCard'; +import ProjectFilter from '../components/projects/ProjectFilter'; +import ResourcesCard from '../components/projects/ResourcesCard'; +import ProjectPopup from '../components/projects/ProjectPopup'; import Loader from '../components/Loader'; -import pcrP from '../static/images/projects/pcrP.webp'; -import chessP from '../static/images/projects/chessP.webp'; -import droneP from '../static/images/projects/droneP.webp'; -import fitnessP from '../static/images/projects/fitnessP.webp'; -import musicP from '../static/images/projects/musicP.webp'; -import carP from '../static/images/projects/carP.webp' -import crackleP from '../static/images/projects/crackleP.webp' -import robotarmP from '../static/images/projects/robotic_armP.webp' -import texelArtsP from '../static/images/projects/texelArtsP.webp' -import traceP from '../static/images/projects/traceP.webp' -import hydroponicsP from '../static/images/projects/hydroponicsP.webp' -import placeholder from '../static/images/projects/placeholder.png' +import pcrVid from '../static/videos/pcrTest.gif'; + +import { PROJECT_KEYS, PROJECT_NAMES, PROJECT_IMAGES, PROJECT_TEAM_PAGES, PROJECT_CODEBASES, PROJECT_DESCRIPTIONS, FINISHED_PROJECTS, ONGOING_PROJECTS, PROJECT_VIDEOS, PROJECT_SLIDESHOWS} from '../static/constants/Projects'; +import { TECH_LEAD_NAMES } from '../static/constants/About'; -import pcr1 from '../static/images/slideshows/pcrSPic1.webp'; -import pcr2 from '../static/images/slideshows/pcrSPic2.webp'; -import pcr3 from '../static/images/slideshows/pcrSPic3.webp'; -import drone1 from '../static/images/slideshows/droneSPic1.webp'; -import drone2 from '../static/images/slideshows/droneSPic2.webp'; -import drone3 from '../static/images/slideshows/droneSPic3.webp'; -import chess1 from '../static/images/slideshows/chessSPic1.webp'; -import chess2 from '../static/images/slideshows/chessSPic2.webp'; -import chess3 from '../static/images/slideshows/chessSPic3.webp'; -import fitness1 from '../static/images/slideshows/fitnessSPic1.webp'; -import fitness2 from '../static/images/slideshows/fitnessSPic2.webp'; -import fitness3 from '../static/images/slideshows/fitnessSPic3.webp'; -import music1 from '../static/images/slideshows/musicSPic1.webp'; -import music2 from '../static/images/slideshows/musicSPic2.webp'; -import music3 from '../static/images/slideshows/musicSPic3.webp'; -import hydroponics1 from '../static/images/slideshows/hydroponicSPic1.webp'; -import hydroponics2 from '../static/images/slideshows/hydroponicSPic2.webp'; -import hydroponics3 from '../static/images/slideshows/hydroponicSPic3.webp'; import cv from '../static/images/lectures/cv.webp'; import deepLearning from '../static/images/lectures/deepLearning.webp'; import cvIntro from '../static/images/lectures/introToCV.webp'; @@ -46,21 +21,11 @@ import rlIntro from '../static/images/lectures/introToRL.webp'; import qL from '../static/images/lectures/qL.webp'; import markov from '../static/images/lectures/markovModelFree.webp'; -import pcrVid from '../static/videos/pcrTest.gif'; -import chessVid from '../static/videos/chessTest.gif'; -import droneVid from '../static/videos/droneTest.gif'; -import fitnessVid from '../static/videos/fitnessTest.gif'; -import musicVid from '../static/videos/musicTest.gif'; -// import robotarmVid from '../static/videos/robotarmTest.gif'; -import texelArtsVid from '../static/videos/TexelArtsTest.gif' -import robotArmVid from '../static/videos/arm_project.gif'; -import smartMirrorVid from '../static/videos/smartMirrorVid.gif'; -import carVid from '../static/videos/carVid.gif' - import projectTransHead from '../static/vectors/projectHeaderTransition.svg'; import temp from '../static/vectors/projectBackground.svg'; -import { finished } from 'stream'; + + function Projects() { const [showPopup, setShowPopup] = useState(false); @@ -70,9 +35,10 @@ function Projects() { name: string; lName: string; members: string; - desc: string; + desc?: string; git: string; gantt: string; + SliderData ?: Array; rect?: DOMRect; }>({ id: 0, @@ -86,14 +52,6 @@ function Projects() { rect: new DOMRect(10, 20, 30, 40) }); - const [curFilter, setCurFilter] = useState([0]); - - //@ts-ignore - const handleFilterChange = (newFilters ) => { - handleResize(); - setCurFilter(newFilters); - - }; const handleOpenPopup = (info : { id: number; @@ -101,9 +59,10 @@ function Projects() { name: string; lName: string; members: string; - desc: string; + desc?: string; git: string; gantt: string; + SliderData ?: Array; }, ClientRect : DOMRect | undefined) => { setCardInfo({...info, rect: ClientRect}); setShowPopup(true); @@ -114,246 +73,6 @@ function Projects() { setShowPopup(false); }; - const cardData =[ - {//PCR - id: 0, - img : pcrP, - name:'PCR', - lName:"Angelica Sharma, Vishal Kantahraju", - members:"Angelica, Vishal, Andrew, Thida, Nathan, Kritika, Harshita, Harish, Archit, Aarya, James", - desc: 'We are automating PCR, a medical technique used to duplicate DNA. We have most individual components working, so this semester, we will focus on putting it all together, testing it with PCR, and writing a research paper to publish our robot', - git:"https://github.com/ECLAIR-Robotics/PCR_Automation", - gantt:"https://docs.google.com/spreadsheets/d/1qEEfA078V_SaOaCuu-pih-EUJhn9BdbRNVKUYMlfKlY/edit?usp=sharing", - finished:1, - video: pcrVid, - SliderData : [ - { - image: - pcr1 - }, - { - image: - pcr2 - }, - { - image: - pcr3 - } - ] - }, - {//chess - id: 1, - img :chessP , - name:'Chess Teacher', - lName:"Hursh Jha, Anik Patel", - members:"Hursh, Anik, Caleb", - desc: 'Chess Teacher is a robot that is designed to not only play a game of chess, but also teach the player how to improve, and adjust its style to allow the player to maximize their learning opportunities. We use an overhead camera coupled with computer vision to enable the robot to have an accurate understanding of the game, while using our own in house chess engine to play the game - enabling the robot to have a comprehensive understanding over every position.', - git:"https://github.com/ECLAIR-Robotics/Chess_Teacher", - gantt:"https://docs.google.com/spreadsheets/d/1CbTH5hqcQgmXZnDkoqhe9yYVnaWjdlhSyqxfz_0mcEA/edit?usp=sharing", - finished:1, - video: chessVid, - SliderData : [ - { - image: - chess1 - }, - { - image: - chess2 - }, - { - image: - chess3 - } - ] - }, - {//autonomous drone - id: 2, - img :droneP , - name:'Autonomous Drone', - lName:"Carson Stark", - members:"Justin Sasek", - desc: 'For our project, we’re programming a hexacopter drone to navigate and preform tasks autonomously using a suite of cameras and sensors. Missions may include indoor navigation and mapping, trash pickup, or military-style search and destroy. We use the python programming language, Robot Operating System, and ArduCopter firmware. No experience is necessary.', - git:"https://github.com/ECLAIR-Robotics/Drone_Prooject", - gantt:"https://docs.google.com/spreadsheets/d/1HXZt8AaNJ8NgtD4zdfVyAx9iu88J-shJCg4XmMV2MSs/edit?usp=sharing", - finished:1, - video: droneVid, - SliderData : [ - { - image: - drone1 - }, - { - image: - drone2 - }, - { - image: - drone3 - } - ] - }, - {//music - id: 3, - img :musicP , - name:'Music Mood', - lName:"Sahana Ganapathy", - members:"Mehul Murali, Seungwon Lee, Nikhil Kalidasu, Nidhi Thippana, Jason Ren, Sarah Wang-Zhou", - desc: 'We trained and fine tuned a large language model to associate emotions with a song given it’s lyrics, and used the model to gather emotion data on Spotify profiles/playlists. Our next steps are integrating this model into a usable application and further exploring its capabilities.', - git:"https://github.com/ECLAIR-Robotics/Song-Analysis", - gantt:"https://docs.google.com/spreadsheets/d/1X8J35_nY-nvYd4q41Xf4_2WzTLX5uL0LTaCeWgZsZ2c/edit?usp=sharing", - finished:1, - video: musicVid, - SliderData : [ - { - image: - music1 - }, - { - image: - music2 - }, - { - image: - music3 - } - ] - }, - {//robot arm - id: 4, - img : robotarmP , - name:'Robotic Arm', - lName:"Sahil Jain", - members:"Conrad Li", - desc: 'By utilizing a simple robotic arm, we aim to implement inverse kinematics and more advanced software features to further our understanding of robotic arm construction.', - git:"https://github.com/ECLAIR-Robotics/RoboticArm-", - gantt:"https://github.com/ECLAIR-Robotics/RoboticArm555-", - finished:1, - video: robotArmVid, - }, - {//fitness tracker - id: 5, - img :fitnessP , - name:'Fitness Tracker', - lName:"Kyrylo Boiko", - members:"Abbhinav Jayaraman and Annabel To", - desc: 'We worked on creating a smart fitness band that would assist gym goers with tracking reps and measuring their form. We used positional & movement data from an IMU sensor and an ML model to transfer findings. It can be further developed to provide real-time suggestions based on most common form errors that are similar to user’s movement patterns.', - git:"https://github.com/ECLAIR-Robotics/fitness-tracker", - gantt:"https://docs.google.com/spreadsheets/d/19foBPCCLEiLqI4vJ4cUKgb43mY644ruY5lhwpawIxis/edit?usp=sharing", - finished:1, - video: fitnessVid, - SliderData : [ - { - image: - fitness1 - }, - { - image: - fitness2 - }, - { - image: - fitness3 - } - ] - }, - {//smart mirror - id: 6, - img :"https://drive.google.com/uc?export=view&id=18k4112Of06u9Yb42pT8NL_o8Nk-GgEny" , - name:'Smart Mirror', - lName:"Sahil Jain", - members:"Conrad Li", - desc: 'We aim to modify a Samsung infrared TV in order to make a functional smart mirror capable of interacting with a user and performing basic utility functions.', - git:"https://github.com/ECLAIR-Robotics/Smart-Mirror", - gantt:"https://docs.google.com/spreadsheets/d/1cCVkAxT6YRqcerKprb5HxVsnR_jYmP8Ai7Nvbnz0M0I/edit?usp=sharing", - finished:1, - video: smartMirrorVid, - }, - - {//autonomous car - id: 7, - img : carP, - name:'Autonomous Car', - lName:"", - members:"Sahana, Nikhil, Ayaan, Jerry, Vinaenae, Cameron, Alexzander, Marcus, Miles, Tommy, Masamu, Hannah", - desc: 'The goal of the autonomous car project is to build a fully autonomous RC car that has support for natural language intake and feedback. Overall, we are trying to establish a greater bond of trust between the user and the car, something that the industry is still working on today.', - git: "https://github.com/ECLAIR-Robotics/nlp-car", - gantt:"", - finished:0, - video: carVid, - SliderData : [] - - }, - - {//CRACKLE - id: 8, - img : crackleP, - name:'CRACKLE', - lName:"", - members:"Tanay, Manas, Leo, Yash, Gaurav, Tanay, Manav, Shalani, Ayaan, Isabella, Keshav, Sanskar", - desc: "Crackle's goal is to emulate DUM-E from Iron Man. This means fully resolving voice commands spoken into dynamically generated plans using GPT. The finished product will be able to perform any physically possible task requested by a user", - git:"https://github.com/ECLAIR-Robotics/crackle", - gantt:"https://befitting-galliform-d9c.notion.site/Crackle-Teamspace-Home-9e32fd2ea0ca4e4695607c16f522433f", - finished:0, - video: "", - SliderData : [] - - }, - {//Texel Arts - id: 9, - img : texelArtsP, - name:'Texel Arts', - lName:"", - members:"Kevin, Anna, Umer", - desc: 'The Texel Arts project is a machine learning system that takes videos and transforms them into animation files applied on given rigs. The final goal is an online library of animations that can be readily downloaded, where processed animations are continuously added to the website', - git:"", - gantt:"", - finished:0, - video: texelArtsVid, - SliderData : [] - }, - {//TRACE - id: 10, - img : traceP, - name: "TRACE", - lName: "", - members: "Arnav, Rizky, Chris, Dan, Rishab, Isabella, Cameron", - desc: "TRACE is a project to track and control the position of a ball on a tilting platform. The goals of this project are to exhibit a basic control system with two degrees of freedom that also implements computer vision. This will help develop member skills with CV, controls, simulation, and hardware design.", - git: "", - gantt: "", - finished: 0, - video: "", - SliderData : [] - }, - - {//Hydroponics - id: 11, - img: hydroponicsP, - name: "Hydroponics", - lName: "Arnav Joshi", - members: "Isabella, Sanskar, Markus, Anisha", - desc: "We aim to create an automated hydroponic garden.", - git: "", - gantt: "https://www.notion.so/Autonomous-Hydroponics-de7db5da18214e42a170f000432b0deb", - finished: 1, - video: "", - SliderData : [ - { - image: - hydroponics1 - }, - { - image: - hydroponics2 - }, - { - image: - hydroponics3 - } - ] - }, - ]; - const MLData = [ { id: 100, @@ -403,12 +122,29 @@ function Projects() { window.open(link, '_blank'); } - const filteredCardData = cardData.filter(card => curFilter.includes(card.finished)); + const [curFilter, setCurFilter] = useState("inprogress"); + const [filteredKeys, setFilteredKeys] = useState(ONGOING_PROJECTS); + const cardLocations = useRef>([]); useEffect(() => { - cardLocations.current = cardLocations.current.slice(0, cardData.length); - }, [cardData]); + console.log("Filter changed to: ", curFilter); + if (curFilter === "all") { + setFilteredKeys(PROJECT_KEYS); + console.log("All keys: ", PROJECT_KEYS); + } else if (curFilter === "inprogress") { + setFilteredKeys(ONGOING_PROJECTS); + console.log("Ongoing keys: ", ONGOING_PROJECTS); + } else if (curFilter === "completed") { + setFilteredKeys(FINISHED_PROJECTS); + console.log("Finished keys: ", FINISHED_PROJECTS); + } + + console.log("Filtered keys: ", filteredKeys); + cardLocations.current = cardLocations.current.slice(0, filteredKeys.length); + handleResize(); + + }, [curFilter]); const [pBGLoaded, setPBGLoaded] = useState(false); const pBGDivRef = useRef(null); @@ -417,23 +153,14 @@ function Projects() { const[resize, isResized] = useState(false); useEffect(() => { - // const bgDiv : HTMLDivElement | null = document.querySelector('.projectPageBelowHeader'); - // bgDiv?.addEventListener('load', pBGLateLoadWrapper); if (pBGDivRef.current && pElementRef.current) { const divHeight = pBGDivRef.current.clientHeight; pElementRef.current.style.height = `${divHeight}px`; } - // setPBGLoaded(true); - // if (bgDiv && bgDiv.style.backgroundImage !== "") { - // setPBGLoaded(true); - // } else { - - // } }, [resize]); function handleResize() { - // setPBGLoaded(false); isResized(!resize); } window.addEventListener('resize', handleResize); @@ -444,7 +171,6 @@ function Projects() { async function handleLoad() { setTimeout(wrapperFunction, 200) - } return ( @@ -453,37 +179,47 @@ function Projects() { What We Do
- {/*
*/}

Projects

-
-
    -
  • handleFilterChange([0])}>In-Progress
  • -
  • handleFilterChange([1])}>Completed
  • -
  • handleFilterChange([0, 1])}>All
  • -
-
+
- {filteredCardData.map((card, index) => ( - cardLocations.current[index] = el} - onOpenPopup={() => handleOpenPopup(card, cardLocations.current[index]?.getBoundingClientRect())} - /> - ))} + {filteredKeys.map((key, index) => { + const techLeads = Object.entries(TECH_LEAD_NAMES) + .filter(([leadKey]) => leadKey.startsWith(key)) + .map(([, name]) => name) + .join(", "); + + return ( + (cardLocations.current[index] = el)} + onOpenPopup={() => + handleOpenPopup( + { + id: index, + name: PROJECT_NAMES[key], + img: PROJECT_IMAGES[key], + lName: techLeads, + members: "", + desc: PROJECT_DESCRIPTIONS[key], + git: PROJECT_CODEBASES[key], + gantt: PROJECT_TEAM_PAGES[key], + SliderData: PROJECT_SLIDESHOWS[key], + }, + cardLocations.current[index]?.getBoundingClientRect() + ) + } + /> + ); + })}
- +
@@ -492,7 +228,7 @@ function Projects() {
{MLData.map((card, index) => ( -
- +
diff --git a/src/pages/Sponsors.tsx b/src/pages/Sponsors.tsx index c272a50..e31fea3 100644 --- a/src/pages/Sponsors.tsx +++ b/src/pages/Sponsors.tsx @@ -1,5 +1,5 @@ -import '../styles/sponsors.css'; +import '../styles/sponsors/sponsors.css'; import spon from '../static/vectors/sponsorsDivider.svg'; import bg from '../static/vectors/sponsorsBackground.svg'; @@ -10,8 +10,8 @@ import email from '../static/images/sponsor-images/emailIcon1.webp'; import form from '../static/images/sponsor-images/formIcon.webp'; import React, { useEffect, useRef, useState } from 'react'; //import SponsorPackageRow from '../components/SponsorPackageRow'; -import CurrentSponsorRow from '../components/CurrentSponsorRow'; -import ContactInformationContainer from '../components/ContactInformationContainer'; +import SponsorRow from '../components/sponsors/SponsorRow'; +import ContactInformationContainer from '../components/general/ContactInformationContainer'; function Sponsors() { @@ -96,8 +96,7 @@ function Sponsors() {
load animation
- {/* */} - +
diff --git a/src/static/constants/About.ts b/src/static/constants/About.ts index 63fa509..cfd99a3 100644 --- a/src/static/constants/About.ts +++ b/src/static/constants/About.ts @@ -10,10 +10,12 @@ import manavImg from '../images/officer/manav.webp' import tanayImg from '../images/officer/tanay.webp' import sahanaImg from '../images/officer/sahana.webp' import umerImg from '../images/officer/umer.webp' -import tanyaImg from '../images/officer/tanya.webp' -import tanviImg from '../images/officer/tanvi.webp' -import isabellaImg from '../images/officer/isabella.webp' -import danielImg from '../images/officer/daniel.webp' +import suhasImag from '../images/officer/suhas.webp' +import yashImg from '../images/officer/yash.webp' +import chrisImg from '../images/officer/chris.webp' +import devImg from '../images/officer/dev.webp' +import marcusImg from '../images/officer/marcus.webp' +import victorImg from '../images/officer/victor.webp' import placeholderImg from '../images/officer/placeholder.webp' @@ -95,37 +97,57 @@ export const OFFICER_FUN_IMAGES: { [key: string]: any } = { FINANCIAL: rizkyImg, } -export const TECH_LEAD_KEYS = [ +export const CUR_TECH_LEAD_KEYS = [ "CRACKLE1", "CRACKLE2", - "TRACE1", - "TRACE2", - "AUTONOMOUS_CAR", - "TEXEL_ARTS", - "BEGINNERS_TRACK1", - "BEGINNERS_TRACK2", - "EPIC1", - "EPIC2", - "DUCKDUCKFLOW" + "MCQUEEN1", + "MCQUEEN2", + "TAKOS1", + "TAKOS2", + "AUTONOMOUS_CAR1", + "AUTONOMOUS_CAR2", + "EYE_TRACKER", ]; export const TECH_LEAD_NAMES: { [key: string]: string} = { CRACKLE1: "Tanay Garg", CRACKLE2: "Manav Karonde", + MCQUEEN1: "Suhas Voolla", + MCQUEEN2: "Yash Karandikar", + TAKOS1: "Christopher Elwood", + TAKOS2: "Rizky Pratama", + EYE_TRACKER: "Dev Patel", TRACE1: "Arnav Joshi", TRACE2: "Rizky Pratama", - AUTONOMOUS_CAR: "Sahana Ganapathy", + AUTONOMOUS_CAR1: "Marcus Fojas", + AUTONOMOUS_CAR2: "Victor Sanchez", TEXEL_ARTS: "Umer Khan", BEGINNERS_TRACK1: "Daniel Lagoye", BEGINNERS_TRACK2: "Tanooj Kanike", EPIC1: "Tanya Nikam", EPIC2: "Tanvi Nikam", - DUCKDUCKFLOW: "Isabella Yim" + DUCKDUCKFLOW: "Isabella Yim", + PCR1: "Angelica Sharma", + PCR2: "Vishal Kantahraju", + CHESS_TEACHER1: "Hursh Jha", + CHESS_TEACHER2: "Anik Patel", + AUTONOMOUS_DRONE: "Carson Stark", + MUSIC_MOOD: "Sahana Ganapathy", + ROBOTIC_ARM:"Sahil Jain", + FITNESS_TRACKER: "Kyrylo Boiko", + SMART_MIRROR: "Sahil Jain", } export const TECH_LEAD_EMAILS: { [key: string]: string } = { CRACKLE1: "tanay.garg@utexas.edu", CRACKLE2: "karonde.manav@gmail.com", + MCQUEEN1: "suhasv@utexas.edu", + MCQUEEN2: "yashkarandikar158@gmail.com", + TAKOS1: "christopher.elwood2024@gmail.com", + TAKOS2: "rapratama2005@gmail.com", + EYE_TRACKER: "dap4675@my.utexas.edu", + AUTONOMOUS_CAR1: "mtf758@my.utexas.edu", + AUTONOMOUS_CAR2: "vjs653@eid.utexas.edu", TRACE1: "arnavjoshi@utexas.edu", TRACE2: "rapratama2005@gmail.com", AUTONOMOUS_CAR: "sahanagana@utexas.edu", @@ -138,14 +160,19 @@ export const TECH_LEAD_EMAILS: { [key: string]: string } = { } export const TECH_LEAD_LINKED_INS: { [key: string]: string } = { + MCQUEEN1:"https://www.linkedin.com/in/suhasvoolla/", + MCQUEEN2:"https://www.linkedin.com/in/yashkarandikar/", + TAKOS1: "https://www.linkedin.com/in/christopherelwood23/", + TAKOS2: "https://www.linkedin.com/in/rapratama1/", + EYE_TRACKER: "", CRACKLE1: "https://www.linkedin.com/in/tanay-garg/", CRACKLE2: "https://www.linkedin.com/in/manav-karonde-678b39319/", TRACE1: "https://www.linkedin.com/in/arnavsjoshi/", TRACE2: "https://www.linkedin.com/in/rapratama1/", - AUTONOMOUS_CAR: "https://www.linkedin.com/in/sahana-ganapathy/", + AUTONOMOUS_CAR1: "https://www.linkedin.com/in/marcusthaddeusroquefojas/", + AUTONOMOUS_CAR2: "", TEXEL_ARTS: "https://www.linkedin.com/in/umerkhan000/", BEGINNERS_TRACK1: "https://www.linkedin.com/in/daniel-lagoye/", - BEGINNERS_TRACK2: "", EPIC1: "https://www.linkedin.com/in/tanyaknikam/", EPIC2: "https://www.linkedin.com/in/tanvi-nikam-6736a827b/", DUCKDUCKFLOW: "https://www.linkedin.com/in/iyim/" @@ -154,9 +181,15 @@ export const TECH_LEAD_LINKED_INS: { [key: string]: string } = { export const TECH_LEAD_DESCS: { [key: string]: string } = { CRACKLE1: "Hi! I am Tanay, and I am a CS major at UT Austin. I love Formula 1, soccer, and playing the guitar! I want to use AI to revolutionize educational technology!", CRACKLE2: "Hello friend, My name is Manav and I'm a sophmore in Computer Science here at UT. I've lived in Austin for the past decade, but am from New York originally. I've spent the past two semesters on CRACKLE, but when I'm not doing that or building wacky personal robotics projects, I like to play the drums / guitar (especially rock punk and blues), dabble in photography, drive around windows down with my dog, or just stare at a blank wall and contemplate life.", + MCQUEEN1: "Hey y'all, I'm Suhas. I'm from Austin, TX and I'm a sophomore at UT studying CS with minors in Robotics and Business. I enjoy flying drones, listening to music, and doomscrolling.", + MCQUEEN2: "Hi! I am a sophomore CS major. I am interested in Robotics, Linux, and computing in general. When I’m not working on this project, I’m also a TA for CS 311!", + TAKOS1: "I am Chris Elwood, I'm from Austin, TX, and I'm majoring in CS. I currently am a Sophomore and I have a special interest in hardware and robotics.", + TAKOS2: "Hi! I'm Rizky. I'm a 2nd year CS major from Katy, Texas with an interest in Robotics, Computer Vision, and AI. Outside of that, I boulder, play D&D, dance, and eat lots. Never challenge me to a card game. :P", + EYE_TRACKER: "Hi, I'm Dev! I'm a freshman biomedical engineering major on the pre-med track. I'm interested in all things that intersect engineering and medicine. Outside of school, I enjoy playing tennis and reading.", TRACE1: "Our unprofessional president does not know how to send descriptions on time so the technology director is leaving this here until he fixes it", TRACE2: "Hi! I'm Rizky. I'm a CS major from Katy, Texas with an interest in Robotics, Computer Vision, and AI. Outside of that, I boulder, dance, play D&D, and eat lots. Never challenge me to a card game:P", - AUTONOMOUS_CAR: "Hello, I am Sahana. I'm a CS major and a senior with interests in system security and machine learning. Aside from that, I love painting, climbing, and gaming >:D", + AUTONOMOUS_CAR1: "Hello! My name is Marcus, a third-year studying Economics (BS) and Philosophy along with four minors/certificates, one of which is \"the CS one\" (Programming and Computation). I have a dabbling interest in all technical/STEM fields in general, but you're also free to ask me about my majors relating to logic and ethics!", + AUTONOMOUS_CAR2: "I'm Victor! I am a sophomore CS major and I am interested in AI, more specifically Reinforcement learning", TEXEL_ARTS: "Hey yall, I am CS and Math major that do be working on stuff.", BEGINNERS_TRACK1: " Hey! My name is Daniel and I'm an ECE major from Houston. I have quite a few things I'm interested in, but currently my main hobbies include badly learning guitar, making odd battlebots, and catching up on anime.", BEGINNERS_TRACK2: " I am a freshman at UT majoring in ECE Honors. I gained interest in robotics during my years competing in FTC, and have an interest in video game designing. I compete in online hackathons and program in MHCP", @@ -168,13 +201,16 @@ export const TECH_LEAD_DESCS: { [key: string]: string } = { export const TECH_LEAD_FUN_IMAGES: { [key: string]: any } = { CRACKLE1: tanayImg, CRACKLE2: manavImg, + MCQUEEN1: suhasImag, + MCQUEEN2: yashImg, + TAKOS1: chrisImg, + TAKOS2: rizkyImg, + EYE_TRACKER: devImg, + AUTONOMOUS_CAR1: marcusImg, + AUTONOMOUS_CAR2: victorImg, TRACE1: arnavImg, TRACE2: rizkyImg, AUTONOMOUS_CAR: sahanaImg, TEXEL_ARTS: umerImg, - BEGINNERS_TRACK1: danielImg, - BEGINNERS_TRACK2: placeholderImg, //Need - EPIC1: tanyaImg, - EPIC2: tanviImg, - DUCKDUCKFLOW: isabellaImg + } \ No newline at end of file diff --git a/src/static/constants/Projects.ts b/src/static/constants/Projects.ts index 187d157..21c17d7 100644 --- a/src/static/constants/Projects.ts +++ b/src/static/constants/Projects.ts @@ -1,3 +1,56 @@ +import crackleP from "../images/projects/crackleP.webp"; +import traceP from "../images/projects/traceP.webp"; +import carP from "../images/projects/carP.webp"; +import texelArtsP from "../images/projects/texelArtsP.webp"; +import pcrP from "../images/projects/pcrP.webp"; +import chessP from "../images/projects/chessP.webp"; +import droneP from "../images/projects/droneP.webp"; +import musicP from "../images/projects/musicP.webp"; +import robotic_armP from "../images/projects/robotic_armP.webp"; +import fitnessP from "..//images/projects/fitnessP.webp"; +import hydroponicsP from "../images/projects/hydroponicsP.webp"; +import placeholderP from "../images/projects/placeholder.png"; +import mcqueenP from "../images/projects/mcqueenP.webp"; +import takosP from "../images/projects/takosP.webp"; +import eyetrackerP from "../images/projects/eyeTrackerP.webp"; +import duckduckflowP from "../images/projects/duckduckflowP.webp"; +import epicP from '../images/projects/epicP.webp'; +import beginnersTrackP from '../images/projects/beginnerstrackP.webp'; +import smartMirrorP from '../images/projects/smartmirrorP.webp'; + +import placeholder from '../images/projects/placeholder.png' + +import pcr1 from '../images/slideshows/pcrSPic1.webp'; +import pcr2 from '../images/slideshows/pcrSPic2.webp'; +import pcr3 from '../images/slideshows/pcrSPic3.webp'; +import drone1 from '../images/slideshows/droneSPic1.webp'; +import drone2 from '../images/slideshows/droneSPic2.webp'; +import drone3 from '../images/slideshows/droneSPic3.webp'; +import chess1 from '../images/slideshows/chessSPic1.webp'; +import chess2 from '../images/slideshows/chessSPic2.webp'; +import chess3 from '../images/slideshows/chessSPic3.webp'; +import fitness1 from '../images/slideshows/fitnessSPic1.webp'; +import fitness2 from '../images/slideshows/fitnessSPic2.webp'; +import fitness3 from '../images/slideshows/fitnessSPic3.webp'; +import music1 from '../images/slideshows/musicSPic1.webp'; +import music2 from '../images/slideshows/musicSPic2.webp'; +import music3 from '../images/slideshows/musicSPic3.webp'; +import hydroponics1 from '../images/slideshows/hydroponicSPic1.webp'; +import hydroponics2 from '../images/slideshows/hydroponicSPic2.webp'; +import hydroponics3 from '../images/slideshows/hydroponicSPic3.webp'; + +import pcrVid from '../videos/pcrTest.gif'; +import chessVid from '../videos/chessTest.gif'; +import droneVid from '../videos/droneTest.gif'; +import fitnessVid from '../videos/fitnessTest.gif'; +import musicVid from '../videos/musicTest.gif'; +// import robotarmVid from '../videos/robotarmTest.gif'; +import texelArtsVid from '../videos/TexelArtsTest.gif' +import robotArmVid from '../videos/arm_project.gif'; +import smartMirrorVid from '../videos/smartMirrorVid.gif'; +import carVid from '../videos/carVid.gif' + + export const PROJECT_KEYS = [ "CRACKLE", "TRACE", @@ -5,7 +58,18 @@ export const PROJECT_KEYS = [ "TEXEL_ARTS", "BEGINNERS_TRACK", "EPIC", - "DUCKDUCKFLOW" + "DUCKDUCKFLOW", + "PCR", + "CHESS_TEACHER", + "AUTONOMOUS_DRONE", + "MUSIC_MOOD", + "ROBOTIC_ARM", + "FITNESS_TRACKER", + "SMART_MIRROR", + "HYDROPONICS", + "MCQUEEN", + "TAKOS", + "EYE_TRACKER", ] export const PROJECT_NAMES: { [key: string]: string } = { @@ -16,24 +80,160 @@ export const PROJECT_NAMES: { [key: string]: string } = { BEGINNERS_TRACK: "Beginner's Track", EPIC: "E.P.I.C.", DUCKDUCKFLOW: "DuckDuckFlow", + PCR: "P.C.R.", + CHESS_TEACHER: "Chess Teacher", + AUTONOMOUS_DRONE: "Autonomous Drone", + MUSIC_MOOD: "Music Mood", + ROBOTIC_ARM: "Robotic Arm", + FITNESS_TRACKER: "Fitness Tracker", + SMART_MIRROR: "Smart Mirror", + HYDROPONICS: "Hydroponics", + MCQUEEN: "McQueen", + TAKOS: "TAKOS", + EYE_TRACKER: "Eye Tracker", } - -export const PROJECT_TEAM_PAGES: { [key: string]: any} = { +export const PROJECT_TEAM_PAGES: { [key: string]: any } = { CRACKLE: "https://befitting-galliform-d9c.notion.site/Crackle-Teamspace-Home-9e32fd2ea0ca4e4695607c16f522433f", TRACE: "https://www.notion.so/TRACE-18feaa211e138031b1b3cc379fa48413?cookie_sync_completed=true", - AUTONOMOUS_CAR: "", //Need? + AUTONOMOUS_CAR: "", // Need? TEXEL_ARTS: "https://eclair-texel-arts.notion.site/Texel-Arts-19ac77b011c880428939f28b8f068d94", - BEGINNERS_TRACK: "", + BEGINNERS_TRACK: "", //Need? EPIC: "https://docs.google.com/document/d/1gbFuBh5Rj6CCqdpV75lZLSzmt4x5dXSdN6iSoQHVaYI/edit?usp=sharing", - DUCKDUCKFLOW: ["https://www.notion.so/DuckDuckHome-22fd0549950a8075bed4d31c18fd877b", "https://drive.google.com/drive/folders/1HiiFXGnvp3E9dYJ0V1BHyFgouFjwxMa7?usp=sharing"], + DUCKDUCKFLOW: [ + "https://www.notion.so/DuckDuckHome-22fd0549950a8075bed4d31c18fd877b", + "https://drive.google.com/drive/folders/1HiiFXGnvp3E9dYJ0V1BHyFgouFjwxMa7?usp=sharing" + ], + PCR: "https://docs.google.com/spreadsheets/d/1qEEfA078V_SaOaCuu-pih-EUJhn9BdbRNVKUYMlfKlY/edit", + CHESS_TEACHER: "https://docs.google.com/spreadsheets/d/1CbTH5hqcQgmXZnDkoqhe9yYVnaWjdlhSyqxfz_0mcEA/edit", + AUTONOMOUS_DRONE: "https://docs.google.com/spreadsheets/d/1HXZt8AaNJ8NgtD4zdfVyAx9iu88J-shJCg4XmMV2MSs/edit", + MUSIC_MOOD: "https://docs.google.com/spreadsheets/d/1X8J35_nY-nvYd4q41Xf4_2WzTLX5uL0LTaCeWgZsZ2c/edit", + ROBOTIC_ARM: "", + SMART_MIRROR: "https://docs.google.com/spreadsheets/d/1cCVkAxT6YRqcerKprb5HxVsnR_jYmP8Ai7Nvbnz0M0I/edit?gid=0#gid=0", + HYDROPONICS: "https://www.notion.so/Autonomous-Hydroponics-de7db5da18214e42a170f000432b0deb", + MCQUEEN: "https://www.notion.so/Radiator-Springs-Home-2d8d0549950a8159a688e2ea12b16581?source=copy_link", + TAKOS: "https://www.notion.so/TAKOS-Tactile-Appendage-Kinematic-Octopus-System-2a47d39cd23f80e2b943d0dd4f9c8010?source=copy_link", + EYE_TRACKER: "https://www.notion.so/invite/d4e646c11b954dc0323659094bb4b41c3d7c56cd" } -export const PROJECT_CODEBASES: { [key: string]: any} = { + +export const PROJECT_CODEBASES: { [key: string]: any } = { CRACKLE: "https://github.com/ECLAIR-Robotics/crackle", TRACE: "https://github.com/ECLAIR-Robotics/TRACE", - AUTONOMOUS_CAR: "https://github.com/ECLAIR-Robotics/nlp-car", - TEXEL_ARTS: ["https://github.com/Umer-K-PersonOOO/Texel-Art-Media", "https://github.com/Umer-K-PersonOOO/Texel-Art-Website"], - BEGINNERS_TRACK: "", //Need - EPIC: "", //Need + AUTONOMOUS_CAR: "https://github.com/MaxGamer1312/autonomous-car", + TEXEL_ARTS: [ + "https://github.com/Umer-K-PersonOOO/Texel-Art-Media", + "https://github.com/Umer-K-PersonOOO/Texel-Art-Website" + ], + BEGINNERS_TRACK: "", // Need + EPIC: "", // Need DUCKDUCKFLOW: "https://github.com/ECLAIR-Robotics/duck-duck-flow", -} \ No newline at end of file + PCR: "https://github.com/ECLAIR-Robotics/PCR_Automation", + CHESS_TEACHER: "https://github.com/ECLAIR-Robotics/Chess_Teacher", + AUTONOMOUS_DRONE: "", // Need + MUSIC_MOOD: "https://github.com/ECLAIR-Robotics/Song-Analysis", + ROBOTIC_ARM: "https://github.com/ECLAIR-Robotics/RoboticArm-", + FITNESS_TRACKER: "https://github.com/ECLAIR-Robotics/fitness-tracker", + SMART_MIRROR: "https://github.com/ECLAIR-Robotics/Smart-Mirror", + HYDROPONICS: "", // Need +} + +export const PROJECT_IMAGES: { [key: string]: string } = { + CRACKLE: crackleP, + TRACE: traceP, + AUTONOMOUS_CAR: carP, + TEXEL_ARTS: texelArtsP, + BEGINNERS_TRACK: beginnersTrackP, + EPIC: epicP, + DUCKDUCKFLOW: duckduckflowP, + PCR: pcrP, + CHESS_TEACHER: chessP, + AUTONOMOUS_DRONE: droneP, + MUSIC_MOOD: musicP, + ROBOTIC_ARM: robotic_armP, + FITNESS_TRACKER: fitnessP, + SMART_MIRROR: smartMirrorP, + HYDROPONICS: hydroponicsP, + MCQUEEN: mcqueenP, + TAKOS: takosP, + EYE_TRACKER: eyetrackerP, +}; + +export const PROJECT_DESCRIPTIONS: { [key: string]: string | undefined} = { + CRACKLE: "Crackle's goal is to emulate DUM-E from Iron Man. This means fully resolving voice commands spoken into dynamically generated plans using GPT. The finished product will be able to perform any physically possible task requested by a user", + TRACE: "TRACE is a project to track and control the position of a ball on a tilting platform. The goals of this project are to exhibit a basic control system with two degrees of freedom that also implements computer vision. This will help develop member skills with CV, controls, simulation, and hardware design.", + AUTONOMOUS_CAR: 'The goal of the autonomous car project is to build a fully autonomous RC car that has support for natural language intake and feedback. Overall, we are trying to establish a greater bond of trust between the user and the car, something that the industry is still working on today.', + TEXEL_ARTS: 'The Texel Arts project is a machine learning system that takes videos and transforms them into animation files applied on given rigs. The final goal is an online library of animations that can be readily downloaded, where processed animations are continuously added to the website', + BEGINNERS_TRACK: 'This project gives freshmen a fun and hands-on way to explore robotics. Students learn how to build and program small robots that can play soccer.', + EPIC: 'E.P.I.C is the expressive self balancing robot we’re building to explore PID control, computer vision, sensor interfacing, and custom PCB and motor controller design. It features an LCD screen “face” that adjusts expressions based on its current stability. Join us if you want to learn CAD for our robot chassis, tinker with the ESP32 microcontroller, and experiment with computer vision/AI/ML for possible gesture recognition and object detection!', + DUCKDUCKFLOW: 'The DuckDuckFlow Flood Sensor is a wireless, solar-powered, water level monitoring device for deployment in remote flood-prone zones, specifically the Hill Country surrounding Austin. We aim to collect long-term water level data and provide real-time early flood detection to help emergency services mobilize more quickly and effectively, ultimately saving more lives. We are currently working on a prototype, which will eventually be expanded into a network of sensors. This project will stay open source, enabling anyone to build the sensor and help gather water level data from remote regions. A separate web app will display this data as a dashboard along with data analysis metrics. ', + PCR: 'We are automating PCR, a medical technique used to duplicate DNA. We have most individual components working, so this semester, we will focus on putting it all together, testing it with PCR, and writing a research paper to publish our robot', + CHESS_TEACHER: 'Chess Teacher is a robot that is designed to not only play a game of chess, but also teach the player how to improve, and adjust its style to allow the player to maximize their learning opportunities. We use an overhead camera coupled with computer vision to enable the robot to have an accurate understanding of the game, while using our own in house chess engine to play the game - enabling the robot to have a comprehensive understanding over every position.', + AUTONOMOUS_DRONE: 'For our project, we’re programming a hexacopter drone to navigate and preform tasks autonomously using a suite of cameras and sensors. Missions may include indoor navigation and mapping, trash pickup, or military-style search and destroy. We use the python programming language, Robot Operating System, and ArduCopter firmware. No experience is necessary.', + MUSIC_MOOD: 'We trained and fine tuned a large language model to associate emotions with a song given it’s lyrics, and used the model to gather emotion data on Spotify profiles/playlists. Our next steps are integrating this model into a usable application and further exploring its capabilities.', + ROBOTIC_ARM: 'By utilizing a simple robotic arm, we aim to implement inverse kinematics and more advanced software features to further our understanding of robotic arm construction.', + FITNESS_TRACKER: 'We worked on creating a smart fitness band that would assist gym goers with tracking reps and measuring their form. We used positional & movement data from an IMU sensor and an ML model to transfer findings. It can be further developed to provide real-time suggestions based on most common form errors that are similar to user’s movement patterns.', + SMART_MIRROR: 'We aim to modify a Samsung infrared TV in order to make a functional smart mirror capable of interacting with a user and performing basic utility functions.', + HYDROPONICS: "We aim to create an automated hydroponic garden.", + MCQUEEN: "The goal of this project is to train and fine-tune reinforcement learning models to navigate a racetrack. Working with an AWS DeepRacer Autonomous Racecar.", + TAKOS: "The Tactile Appendage Kinematic Octopus System (TAKOS) Project intends to explore biomimicry of Octopus features for a variety of applications by creating a robot (or more likely a series of robots) that can emulate an octopus’s abilities and behaviors as close as humanly possible. This includes the flexibility and dexterity of an octopus’s tentacles, the ability to camouflage into the environment or mimic a creature, and (my personal favorite) the fact that an Octopus’s tentacle can be severed from the rest of its body and still move independently.\nThe first semester will focus on the construction of a basic tentacle. This tentacle should be able to move and sense its environment, at the very least. We may attempt to get the tentacle to be able to think for itself with regards to navigation and/or object manipulation, though the computing power required may exceed what is possible depending on the chosen SBC. We may consider attaching the tentacle to the Robot Arm or make it a wearable robot.\nThe following semesters may focus on one, some, or all of the following: creating the rest of the Octopus and mimicking its abilities and behaviors; reconstructing the tentacle out of more advanced materials for better flexibility; adding pneumatics to the tentacle to enhance gripping ability, etc.", + EYE_TRACKER: "The Eye Tracker project aims to develop a low-cost, accurate eye-tracking system using computer vision techniques. This system can be used for various applications, including assistive technology for individuals with disabilities, user experience research, and interactive gaming." +} + +export const PROJECT_VIDEOS: { [key: string]: string | undefined } = { + CRACKLE: undefined, + TRACE: undefined, + AUTONOMOUS_CAR: carVid, + TEXEL_ARTS: texelArtsVid, + BEGINNERS_TRACK: undefined, + EPIC: undefined, + DUCKDUCKFLOW: undefined, + PCR: pcrVid, + CHESS_TEACHER: chessVid, + AUTONOMOUS_DRONE: droneVid, + MUSIC_MOOD: musicVid, + ROBOTIC_ARM: robotArmVid, + FITNESS_TRACKER: fitnessVid, + SMART_MIRROR: smartMirrorVid, + HYDROPONICS: undefined, +} + +export const PROJECT_SLIDESHOWS: { [key: string]: Array | undefined } = { + CRACKLE: undefined, + TRACE: undefined, + AUTONOMOUS_CAR: undefined, + TEXEL_ARTS: undefined, + BEGINNERS_TRACK: undefined, + EPIC: undefined, + DUCKDUCKFLOW: undefined, + PCR: [pcr1, pcr2, pcr3], + CHESS_TEACHER: [chess1, chess2, chess3], + AUTONOMOUS_DRONE: [drone1, drone2, drone3], + MUSIC_MOOD: [music1, music2, music3], + ROBOTIC_ARM: undefined, + FITNESS_TRACKER: [fitness1, fitness2, fitness3], + SMART_MIRROR: undefined, + HYDROPONICS: [hydroponics1, hydroponics2, hydroponics3], +} + +export const FINISHED_PROJECTS = [ + "PCR", + "CHESS_TEACHER", + "AUTONOMOUS_DRONE", + "MUSIC_MOOD", + "ROBOTIC_ARM", + "FITNESS_TRACKER", + "SMART_MIRROR", + "HYDROPONICS", + "TRACE", + "TEXEL_ARTS", + "EPIC", + "DUCKDUCKFLOW" +] + +export const ONGOING_PROJECTS = [ + "CRACKLE", + "AUTONOMOUS_CAR", + "MCQUEEN", + "TAKOS", + "EYE_TRACKER", +] \ No newline at end of file diff --git a/src/static/images/officer/chris.webp b/src/static/images/officer/chris.webp new file mode 100644 index 0000000..289457a Binary files /dev/null and b/src/static/images/officer/chris.webp differ diff --git a/src/static/images/officer/daniel.webp b/src/static/images/officer/daniel.webp deleted file mode 100644 index c8af733..0000000 Binary files a/src/static/images/officer/daniel.webp and /dev/null differ diff --git a/src/static/images/officer/dev.webp b/src/static/images/officer/dev.webp new file mode 100644 index 0000000..0982e75 Binary files /dev/null and b/src/static/images/officer/dev.webp differ diff --git a/src/static/images/officer/isabella.webp b/src/static/images/officer/isabella.webp deleted file mode 100644 index 58da017..0000000 Binary files a/src/static/images/officer/isabella.webp and /dev/null differ diff --git a/src/static/images/officer/joke/ducky.webp b/src/static/images/officer/joke/ducky.webp deleted file mode 100644 index 10b1256..0000000 Binary files a/src/static/images/officer/joke/ducky.webp and /dev/null differ diff --git a/src/static/images/officer/joke/frat_bro.webp b/src/static/images/officer/joke/frat_bro.webp deleted file mode 100644 index f6d6446..0000000 Binary files a/src/static/images/officer/joke/frat_bro.webp and /dev/null differ diff --git a/src/static/images/officer/joke/lebron_james.webp b/src/static/images/officer/joke/lebron_james.webp deleted file mode 100644 index 6e2699e..0000000 Binary files a/src/static/images/officer/joke/lebron_james.webp and /dev/null differ diff --git a/src/static/images/officer/joke/lightning_mcqueen.webp b/src/static/images/officer/joke/lightning_mcqueen.webp deleted file mode 100644 index 9dce5b6..0000000 Binary files a/src/static/images/officer/joke/lightning_mcqueen.webp and /dev/null differ diff --git a/src/static/images/officer/joke/lionel_messi.webp b/src/static/images/officer/joke/lionel_messi.webp deleted file mode 100644 index 99f9e25..0000000 Binary files a/src/static/images/officer/joke/lionel_messi.webp and /dev/null differ diff --git a/src/static/images/officer/joke/ma_long.webp b/src/static/images/officer/joke/ma_long.webp deleted file mode 100644 index 481d747..0000000 Binary files a/src/static/images/officer/joke/ma_long.webp and /dev/null differ diff --git a/src/static/images/officer/joke/octane.webp b/src/static/images/officer/joke/octane.webp deleted file mode 100644 index b7eba01..0000000 Binary files a/src/static/images/officer/joke/octane.webp and /dev/null differ diff --git a/src/static/images/officer/joke/spider_man.webp b/src/static/images/officer/joke/spider_man.webp deleted file mode 100644 index 42b7771..0000000 Binary files a/src/static/images/officer/joke/spider_man.webp and /dev/null differ diff --git a/src/static/images/officer/joke/tightrope_walker.webp b/src/static/images/officer/joke/tightrope_walker.webp deleted file mode 100644 index c0c5f5a..0000000 Binary files a/src/static/images/officer/joke/tightrope_walker.webp and /dev/null differ diff --git a/src/static/images/officer/joke/tony_stark.webp b/src/static/images/officer/joke/tony_stark.webp deleted file mode 100644 index 1e16467..0000000 Binary files a/src/static/images/officer/joke/tony_stark.webp and /dev/null differ diff --git a/src/static/images/officer/joke/wooden_model.webp b/src/static/images/officer/joke/wooden_model.webp deleted file mode 100644 index 41db749..0000000 Binary files a/src/static/images/officer/joke/wooden_model.webp and /dev/null differ diff --git a/src/static/images/officer/marcus.webp b/src/static/images/officer/marcus.webp new file mode 100644 index 0000000..97c5395 Binary files /dev/null and b/src/static/images/officer/marcus.webp differ diff --git a/src/static/images/officer/suhas.webp b/src/static/images/officer/suhas.webp new file mode 100644 index 0000000..70f4f10 Binary files /dev/null and b/src/static/images/officer/suhas.webp differ diff --git a/src/static/images/officer/tanvi.webp b/src/static/images/officer/tanvi.webp deleted file mode 100644 index 53190f4..0000000 Binary files a/src/static/images/officer/tanvi.webp and /dev/null differ diff --git a/src/static/images/officer/tanya.webp b/src/static/images/officer/tanya.webp deleted file mode 100644 index b4001a2..0000000 Binary files a/src/static/images/officer/tanya.webp and /dev/null differ diff --git a/src/static/images/officer/victor.webp b/src/static/images/officer/victor.webp new file mode 100644 index 0000000..90fc756 Binary files /dev/null and b/src/static/images/officer/victor.webp differ diff --git a/src/static/images/officer/yash.webp b/src/static/images/officer/yash.webp new file mode 100644 index 0000000..3723e2e Binary files /dev/null and b/src/static/images/officer/yash.webp differ diff --git a/src/static/images/projects/beginnerstrackP.webp b/src/static/images/projects/beginnerstrackP.webp new file mode 100644 index 0000000..d726b3f Binary files /dev/null and b/src/static/images/projects/beginnerstrackP.webp differ diff --git a/src/static/images/projects/duckduckflowP.webp b/src/static/images/projects/duckduckflowP.webp new file mode 100644 index 0000000..c3afde3 Binary files /dev/null and b/src/static/images/projects/duckduckflowP.webp differ diff --git a/src/static/images/projects/epicP.webp b/src/static/images/projects/epicP.webp new file mode 100644 index 0000000..548d113 Binary files /dev/null and b/src/static/images/projects/epicP.webp differ diff --git a/src/static/images/projects/eyeTrackerP.webp b/src/static/images/projects/eyeTrackerP.webp new file mode 100644 index 0000000..acbc06b Binary files /dev/null and b/src/static/images/projects/eyeTrackerP.webp differ diff --git a/src/static/images/projects/mcqueenP.webp b/src/static/images/projects/mcqueenP.webp new file mode 100644 index 0000000..3e0a009 Binary files /dev/null and b/src/static/images/projects/mcqueenP.webp differ diff --git a/src/static/images/projects/smartmirrorP.webp b/src/static/images/projects/smartmirrorP.webp new file mode 100644 index 0000000..24ba7e1 Binary files /dev/null and b/src/static/images/projects/smartmirrorP.webp differ diff --git a/src/static/images/projects/takosP.webp b/src/static/images/projects/takosP.webp new file mode 100644 index 0000000..6bbc1ae Binary files /dev/null and b/src/static/images/projects/takosP.webp differ diff --git a/src/static/images/projects/uncompressed/carP.jpg b/src/static/images/projects/uncompressed/carP.jpg deleted file mode 100644 index fcbbe02..0000000 Binary files a/src/static/images/projects/uncompressed/carP.jpg and /dev/null differ diff --git a/src/static/images/projects/uncompressed/chessP.jpg b/src/static/images/projects/uncompressed/chessP.jpg deleted file mode 100644 index bd9fce9..0000000 Binary files a/src/static/images/projects/uncompressed/chessP.jpg and /dev/null differ diff --git a/src/static/images/projects/uncompressed/crackleP.jpg b/src/static/images/projects/uncompressed/crackleP.jpg deleted file mode 100644 index a60e355..0000000 Binary files a/src/static/images/projects/uncompressed/crackleP.jpg and /dev/null differ diff --git a/src/static/images/projects/uncompressed/droneP.jpg b/src/static/images/projects/uncompressed/droneP.jpg deleted file mode 100644 index 439d101..0000000 Binary files a/src/static/images/projects/uncompressed/droneP.jpg and /dev/null differ diff --git a/src/static/images/projects/uncompressed/fitnessP.jpg b/src/static/images/projects/uncompressed/fitnessP.jpg deleted file mode 100644 index 338cca0..0000000 Binary files a/src/static/images/projects/uncompressed/fitnessP.jpg and /dev/null differ diff --git a/src/static/images/projects/uncompressed/hydroponicsP.jpeg b/src/static/images/projects/uncompressed/hydroponicsP.jpeg deleted file mode 100644 index e078dd3..0000000 Binary files a/src/static/images/projects/uncompressed/hydroponicsP.jpeg and /dev/null differ diff --git a/src/static/images/projects/uncompressed/musicP.jpg b/src/static/images/projects/uncompressed/musicP.jpg deleted file mode 100644 index 540a857..0000000 Binary files a/src/static/images/projects/uncompressed/musicP.jpg and /dev/null differ diff --git a/src/static/images/projects/uncompressed/pcrP.jpg b/src/static/images/projects/uncompressed/pcrP.jpg deleted file mode 100644 index e017228..0000000 Binary files a/src/static/images/projects/uncompressed/pcrP.jpg and /dev/null differ diff --git a/src/static/images/projects/uncompressed/robotarmP.jpg b/src/static/images/projects/uncompressed/robotarmP.jpg deleted file mode 100644 index cd6b6cf..0000000 Binary files a/src/static/images/projects/uncompressed/robotarmP.jpg and /dev/null differ diff --git a/src/static/images/projects/uncompressed/robotic_arm.png b/src/static/images/projects/uncompressed/robotic_arm.png deleted file mode 100644 index 250b081..0000000 Binary files a/src/static/images/projects/uncompressed/robotic_arm.png and /dev/null differ diff --git a/src/static/images/projects/uncompressed/texelArtsP.png b/src/static/images/projects/uncompressed/texelArtsP.png deleted file mode 100644 index 2017881..0000000 Binary files a/src/static/images/projects/uncompressed/texelArtsP.png and /dev/null differ diff --git a/src/static/images/projects/uncompressed/traceP.png b/src/static/images/projects/uncompressed/traceP.png deleted file mode 100644 index e70a7c6..0000000 Binary files a/src/static/images/projects/uncompressed/traceP.png and /dev/null differ diff --git a/src/styles/about.css b/src/styles/about/about.css similarity index 100% rename from src/styles/about.css rename to src/styles/about/about.css diff --git a/src/styles/officerCard.css b/src/styles/about/officerCard.css similarity index 100% rename from src/styles/officerCard.css rename to src/styles/about/officerCard.css diff --git a/src/styles/app.css b/src/styles/app.css index 7077554..084067a 100644 --- a/src/styles/app.css +++ b/src/styles/app.css @@ -37,6 +37,7 @@ flex-direction: row; align-items: center; justify-content: left; + justify-self: center; } diff --git a/src/styles/projectcard.css b/src/styles/projectcard.css deleted file mode 100644 index d527fab..0000000 --- a/src/styles/projectcard.css +++ /dev/null @@ -1,72 +0,0 @@ - -.entireCard { - overflow: hidden; - box-shadow: 0 2px 20px gray; - border-radius: 10px; - display:flex; - flex-direction: column; - justify-content: space-between; - transition-property: all; - transition-duration: 0.5s; -} - -.entireCard:hover { - scale:1.02; - transition-property: all; - transition-duration: 0.5s; -} - -.cardImage { - height: 10rem; - width: 100%; - object-fit: cover; -} - -.cardTitle { - text-align: center; -} - -.buttonHolder { - text-align: center; - padding-bottom: 1rem; -} - -.moreButton { - display: inline-block; - font-size: 20px; - color: rgb(0, 0, 0); - font-family: arial, sans-serif; - text-decoration: none; - - position: relative; - background-color: rgb(255, 255, 255); - - border-image: linear-gradient(135deg, rgb(198, 117, 255), rgb(0, 80, 199)); - border-image-slice: 1; - - /* -webkit-backface-visibility: hidden; */ - z-index: 1; - height:auto; -} - -.moreButton:after { - position: absolute; - content: 'Learn More'; - top: 0; - left: 0; - width: inherit; - height: inherit; - /* border-radius: inherit; */ - background-image: linear-gradient(135deg, rgb(198, 117, 255), rgb(0, 80, 199)); - transition: opacity 2s ease-out; - z-index: 2; - opacity: 0; - padding: inherit; - margin: inherit; - color:white; -} - -.entireCard:hover .moreButton:after { - opacity: 1; -} - diff --git a/src/styles/popup.css b/src/styles/projects/popup.css similarity index 100% rename from src/styles/popup.css rename to src/styles/projects/popup.css diff --git a/src/styles/imageprojectcard.css b/src/styles/projects/projectcard.css similarity index 100% rename from src/styles/imageprojectcard.css rename to src/styles/projects/projectcard.css diff --git a/src/styles/projects.css b/src/styles/projects/projects.css similarity index 100% rename from src/styles/projects.css rename to src/styles/projects/projects.css diff --git a/src/styles/imageslidecard.css b/src/styles/projects/resourcescard.css similarity index 100% rename from src/styles/imageslidecard.css rename to src/styles/projects/resourcescard.css diff --git a/src/styles/sponsors.css b/src/styles/sponsors/sponsors.css similarity index 100% rename from src/styles/sponsors.css rename to src/styles/sponsors/sponsors.css