diff --git a/public/data/index.ts b/public/data/index.ts index 4d48894..6050094 100644 --- a/public/data/index.ts +++ b/public/data/index.ts @@ -1,4 +1,10 @@ -import { StatProps, IconCardProps, InfoSectionProps, ProjectCardProps } from "../../src/utils/interfaces/props"; +import { + StatProps, + IconCardProps, + InfoSectionProps, + ProjectCardProps, + RecruitmentStepProps, +} from "../../src/utils/interfaces/props"; import { faBoxesStacked, faChartSimple, @@ -8,11 +14,11 @@ import { import foodwatchLandscape from "../images/foodwatch-landscape.png"; import foodwatchPortait from "../images/foodwatch-portait.png"; import decalLandscape from "../images/decal-landscape.jpg"; -import linkHealthTargetingLandscape from "../images/link-health-targeting-landscape.png" -import orderedLibertyLandscape from "../images/ordered-liberty-landscape.png" -import dataScienceCircleLandscape from "../images/data-science-circle-landscape.png" -import dataScienceCirclePortait from "../images/data-science-circle-portrait.svg" -import linkHealthVendingMachineLandscape from "../images/link-health-vending-machine-landscape.png" +import linkHealthTargetingLandscape from "../images/link-health-targeting-landscape.png"; +import orderedLibertyLandscape from "../images/ordered-liberty-landscape.png"; +import dataScienceCircleLandscape from "../images/data-science-circle-landscape.png"; +import dataScienceCirclePortait from "../images/data-science-circle-portrait.svg"; +import linkHealthVendingMachineLandscape from "../images/link-health-vending-machine-landscape.png"; export const stats: StatProps[] = [ { @@ -68,96 +74,117 @@ export const aboutPageIconCards: IconCardProps[] = [ ]; export const aboutPageInfoSection: InfoSectionProps[] = [ - { - title: "General Meetings", - children: `At GMs, we host discussions and debates about current events, often + { + title: "General Meetings", + children: `At GMs, we host discussions and debates about current events, often relating to AI and tech policy, have guest speaker presentations, and share project updates with the group.`, - img: "/images/meetings.png", - additionalInfo: "Thursdays, 8 - 9 PM" - }, - { - title: "Socials", - children: `Socials can vary in type, like watching debates together, hiking, biking, + img: "/images/meetings.png", + additionalInfo: "Thursdays, 8 - 9 PM", + }, + { + title: "Socials", + children: `Socials can vary in type, like watching debates together, hiking, biking, excursions, parties, and of course we have a retreat each semester. The best place to get to know your PCS pals!`, - img: "/images/retreat.jpeg", - additionalInfo: "Two to three per month" - }, - { - title: "Projects", - children: `The time requirement, duration, locations, and agenda can vary from project + img: "/images/retreat.jpeg", + additionalInfo: "Two to three per month", + }, + { + title: "Projects", + children: `The time requirement, duration, locations, and agenda can vary from project to project. They are a great way to gain experience in technical work, research, or policy analysis!`, - img: "/images/project.png", - additionalInfo: "One meeting per week (usually)" - }, - { - title: "Workshops", - children: `We host a few workshops each month focusing on improving our members' + img: "/images/project.png", + additionalInfo: "One meeting per week (usually)", + }, + { + title: "Workshops", + children: `We host a few workshops each month focusing on improving our members' skill sets, including resumé and career workshops, data science, web development, and much more!`, - img: "/images/workshop.jpg", - additionalInfo: "One to two per month" - } -] + img: "/images/workshop.jpg", + additionalInfo: "One to two per month", + }, +]; export const projects: ProjectCardProps[] = [ { projectName: "FoodWatch", - projectDescription: "Pinpointing areas of food scarcity with neural networks", - tags: [ - "Web Dev", - "Machine Learning" - ], + projectDescription: + "Pinpointing areas of food scarcity with neural networks", + tags: ["Web Dev", "Machine Learning"], landscapePhoto: foodwatchLandscape, - portraitPhoto: foodwatchPortait + portraitPhoto: foodwatchPortait, }, { projectName: "DeCal", - projectDescription: "PS 198: Exploring how digital innovation is rehsaping governance and society", - tags: [ - "Policy Analysis", - "Education" - ], - landscapePhoto: decalLandscape + projectDescription: + "PS 198: Exploring how digital innovation is rehsaping governance and society", + tags: ["Policy Analysis", "Education"], + landscapePhoto: decalLandscape, }, { projectName: "Link Health Targeting", projectDescription: "Using data driven solutions for targeted outreach", - tags: [ - "Data Science", - "Research" - ], - landscapePhoto: linkHealthTargetingLandscape + tags: ["Data Science", "Research"], + landscapePhoto: linkHealthTargetingLandscape, }, { projectName: "Ordered Liberty Lineage Analysis", projectDescription: "Exploring the due process of interpretation", - tags: [ - "Policy Analysis", - "Data Science", - "Research" - ], - landscapePhoto: orderedLibertyLandscape + tags: ["Policy Analysis", "Data Science", "Research"], + landscapePhoto: orderedLibertyLandscape, }, { projectName: "Data Science Circle", projectDescription: "Empowering the next generation of data scientists", - tags: [ - "Data Science", - "Machine Learning" - ], + tags: ["Data Science", "Machine Learning"], landscapePhoto: dataScienceCircleLandscape, - portraitPhoto: dataScienceCirclePortait + portraitPhoto: dataScienceCirclePortait, }, { projectName: "Link Health Vending Machine", - projectDescription: "Connecting under-served individuals to welfare programs", - tags: [ - "Policy Analysis", - "Web Dev" - ], - landscapePhoto: linkHealthVendingMachineLandscape - } -] + projectDescription: + "Connecting under-served individuals to welfare programs", + tags: ["Policy Analysis", "Web Dev"], + landscapePhoto: linkHealthVendingMachineLandscape, + }, +]; + +//TODO: timezone fuckery +export const recruitmentSteps: RecruitmentStepProps[] = [ + + { + name: "Tabling", + start: new Date("2024-08-28"), + end: new Date("2024-09-11"), + description: "We'll be tabling on Sproul! Come say hi.", + }, + { + name: "Coffee Chats", + start: new Date("2024-09-02"), + end: new Date("2024-09-10"), + description: "Chat with a board member and learn more about the club!", + }, + + { + name: "URM Infosession + Infosession 1", + start: new Date("2024-09-05"), + end: new Date("2024-09-05"), + description: "Ia Ia Cthulhu Ftaghn?", + }, + + { + name: "Infosession 2 (Virtual)", + start: new Date("2024-09-09"), + end: new Date("2024-09-09"), + description: "Ia Ia Cthulhu Ftaghn?", + }, + { + name: "Applications Due", + start: new Date("2024-09-10"), + end: new Date("2024-09-10"), + description: "At the end of things, where the dry dust bleeds", + }, +]; diff --git a/public/images/friends.png b/public/images/friends.png new file mode 100644 index 0000000..b020ea7 Binary files /dev/null and b/public/images/friends.png differ diff --git a/public/images/hike.png b/public/images/hike.png new file mode 100644 index 0000000..397934e Binary files /dev/null and b/public/images/hike.png differ diff --git a/public/images/icons/BER.png b/public/images/icons/BER.png new file mode 100644 index 0000000..3ac6a0a Binary files /dev/null and b/public/images/icons/BER.png differ diff --git a/public/images/icons/BPR.png b/public/images/icons/BPR.png new file mode 100644 index 0000000..1685b0f Binary files /dev/null and b/public/images/icons/BPR.png differ diff --git a/public/images/icons/BerkeleyProject.png b/public/images/icons/BerkeleyProject.png new file mode 100644 index 0000000..dc6d627 Binary files /dev/null and b/public/images/icons/BerkeleyProject.png differ diff --git a/public/images/icons/Bridge.png b/public/images/icons/Bridge.png new file mode 100644 index 0000000..847e776 Binary files /dev/null and b/public/images/icons/Bridge.png differ diff --git a/public/images/icons/Citris.png b/public/images/icons/Citris.png new file mode 100644 index 0000000..79c74b2 Binary files /dev/null and b/public/images/icons/Citris.png differ diff --git a/public/images/icons/DPE.png b/public/images/icons/DPE.png new file mode 100644 index 0000000..f2ef20e Binary files /dev/null and b/public/images/icons/DPE.png differ diff --git a/public/images/icons/LinkHealth.png b/public/images/icons/LinkHealth.png new file mode 100644 index 0000000..6b7304b Binary files /dev/null and b/public/images/icons/LinkHealth.png differ diff --git a/public/images/icons/Saas.png b/public/images/icons/Saas.png new file mode 100644 index 0000000..6be4040 Binary files /dev/null and b/public/images/icons/Saas.png differ diff --git a/public/images/icons/billy.png b/public/images/icons/billy.png new file mode 100644 index 0000000..323384c Binary files /dev/null and b/public/images/icons/billy.png differ diff --git a/public/images/icons/citrisLab.jpg b/public/images/icons/citrisLab.jpg new file mode 100644 index 0000000..99dbfce Binary files /dev/null and b/public/images/icons/citrisLab.jpg differ diff --git a/public/images/icons/evil.png b/public/images/icons/evil.png new file mode 100644 index 0000000..e4c3a03 Binary files /dev/null and b/public/images/icons/evil.png differ diff --git a/public/images/icons/google.png b/public/images/icons/google.png new file mode 100644 index 0000000..3e7eea5 Binary files /dev/null and b/public/images/icons/google.png differ diff --git a/public/images/icons/linkhealthHome.png b/public/images/icons/linkhealthHome.png new file mode 100644 index 0000000..8b65a00 Binary files /dev/null and b/public/images/icons/linkhealthHome.png differ diff --git a/public/images/icons/visa.png b/public/images/icons/visa.png new file mode 100644 index 0000000..a7e4a3a Binary files /dev/null and b/public/images/icons/visa.png differ diff --git a/public/images/join_us_page/externalSponsor.png b/public/images/join_us_page/externalSponsor.png new file mode 100644 index 0000000..63d2a70 Binary files /dev/null and b/public/images/join_us_page/externalSponsor.png differ diff --git a/public/images/join_us_page/generalMember.png b/public/images/join_us_page/generalMember.png new file mode 100644 index 0000000..910a888 Binary files /dev/null and b/public/images/join_us_page/generalMember.png differ diff --git a/public/images/join_us_page/partnerClub.png b/public/images/join_us_page/partnerClub.png new file mode 100644 index 0000000..288c1a6 Binary files /dev/null and b/public/images/join_us_page/partnerClub.png differ diff --git a/public/images/silliest.JPG b/public/images/silliest.JPG new file mode 100644 index 0000000..830c29e Binary files /dev/null and b/public/images/silliest.JPG differ diff --git a/src/components/RecruitmentTimeline.tsx b/src/components/RecruitmentTimeline.tsx new file mode 100644 index 0000000..fb2ad2a --- /dev/null +++ b/src/components/RecruitmentTimeline.tsx @@ -0,0 +1,96 @@ +import * as React from "react"; + +import { useTheme } from "@mui/material/styles"; +import HorizontalRuleIcon from "@mui/icons-material/HorizontalRule"; +import { + Stepper, + Step, + StepLabel, + StepButton, + StepConnector, + Box, + Button, + SxProps, + Typography, + Card, + StepProps, + Popover, +} from "@mui/material"; +import useMediaQuery from "@mui/material/useMediaQuery"; + +import { recruitmentSteps } from "../../public/data"; +import { ArrowForward } from "@mui/icons-material"; +import { RecruitmentStepProps } from "../utils/interfaces/props"; + +const PcsConnector = () => { + const theme = useTheme(); + return ( + }> + + + ); +}; + +const RecruitmentTimeline = () => { + const theme = useTheme(); + + const renderDate = (start: Date, end: Date) => { + if (start.getTime() == end.getTime()) { + return start.toLocaleDateString(); + } else { + return `${start.toLocaleDateString()} - ${end.toLocaleDateString()}`; + } + }; + + const bigscreen = useMediaQuery(theme.breakpoints.up("md")); + + return ( + + } + nonLinear + activeStep={null} + orientation={bigscreen ? "horizontal" : "vertical"} + > + {recruitmentSteps.map(({ name, start, end, description }) => ( + + + + {name} + {renderDate(start, end)} + {/*{description}*/} + + + + ))} + + {/* + + + + */} + + + ); +}; + +export default RecruitmentTimeline; diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx index 0fad3b6..3a04ab8 100644 --- a/src/components/layout/Footer.tsx +++ b/src/components/layout/Footer.tsx @@ -59,7 +59,10 @@ const socials = [ const PCS_GMAIL = "pcs.berkeley@gmail.com"; const PCS_ADDRESS = "University of California, Berkeley"; -const bold_no_underline: SxProps = { fontWeight: 600, textDecoration: "none" }; +const bold_no_underline: SxProps = { + fontWeight: "bold", + textDecoration: "none", +}; const getSvgIcon = (Icon: string) => { return ( @@ -110,7 +113,7 @@ const Footer = () => { ); const contactUs = ( - + Contact { }; return ( - + {hasSuffix(stat) ? ( {customCountup(parseInt(stat.slice(0, -1)))} diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index a3a7757..242ee4b 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,15 +1,35 @@ import { Navbar } from "../components/layout"; -import { Box, Button, SxProps, Typography, Card } from "@mui/material"; +import RecruitmentTimeline from "../components/RecruitmentTimeline"; +import { + Divider, + Stack, + Box, + Button, + SxProps, + Typography, + Card, + Paper, + CardMedia, +} from "@mui/material"; import groupPhoto from "/images/group_photo.jpg"; import dssCirclePhoto from "/images/dss_circle_photo.jpg"; import { useTheme } from "@mui/material/styles"; +import citrisPhoto from "/images/icons/citrisLab.jpg"; +import microsoftPhoto from "/images/icons/evil.png"; +import applePhoto from "/images/icons/billy.png"; +import googlePhoto from "/images/icons/google.png"; +import visaPhoto from "/images/icons/visa.png"; +import linkhealthPhoto from "/images/icons/linkhealthHome.png"; +import friendshipPhoto from "/images/friends.png" +import useMediaQuery from "@mui/material/useMediaQuery"; import { defaultFlexStyles, defaultFlexRowStyles, defaultFlexColStyles, getDefaultOverlayStyles, purpleMeshStyles, + purpleInlineText, } from "../utils/constants/styles"; import { Stat } from "../components/miscellaneous"; import { stats } from "../../public/data"; @@ -110,7 +130,6 @@ const Home = () => { ); const clubStats = ( - // TODO replace with a grid with padding? {stats.map((stat) => ( @@ -119,7 +138,6 @@ const Home = () => { ); const whoWeAre = ( - // TODO convert the flex fuckery to a grid layout? { ); + const recruitmentTimeline = ( + + {recruitmentTimelineTitle} + + + ); + + const ourCommunity = ( + + + + + Our{" "} + { + + Community + + } + : + + retreat, socials, speaker events and more! + + + + + ); + + const clubImage = (src) => ( + + ); + + const bigscreen = useMediaQuery(theme.breakpoints.up("sm")); + + const bragging = ( + + + + {" "} + our past{" "} + { + + clients + + }{" "} + + + {clubImage(citrisPhoto)} + {clubImage(linkhealthPhoto)} + + + + + + where do our members go? + + {clubImage(visaPhoto)} + {clubImage(applePhoto)} + + + {clubImage(googlePhoto)} + {clubImage(microsoftPhoto)} + + + + ); + return (
{heroImage} {clubStats} {whoWeAre} + {recruitmentTimeline} + {ourCommunity} + {bragging}
); diff --git a/src/pages/JoinUs.tsx b/src/pages/JoinUs.tsx index 2e7b8eb..b3f82c7 100644 --- a/src/pages/JoinUs.tsx +++ b/src/pages/JoinUs.tsx @@ -1,11 +1,234 @@ -import { Navbar } from "../components/layout" +import { Link, Stack, Typography, Card, Box } from "@mui/material"; +import { Navbar, Footer } from "../components/layout"; + +import { + defaultFlexStyles, + defaultFlexRowStyles, + defaultFlexColStyles, + getDefaultOverlayStyles, + purpleMeshStyles, + purpleInlineText +} from "../utils/constants/styles"; +import { useTheme } from "@mui/material/styles"; +import generalMemberIcon from "/images/join_us_page/generalMember.png"; +import partnerClubIcon from "/images/join_us_page/partnerClub.png"; +import externalSponsorIcon from "/images/join_us_page/externalSponsor.png"; +import citrisImage from "/images/icons/Citris.png"; +import linkHealthImage from "/images/icons/LinkHealth.png"; +import berIcon from "/images/icons/BER.png"; +import saasIcon from "/images/icons/Saas.png"; +import berkeleyProjectIcon from "/images/icons/BerkeleyProject.png"; +import bprIcon from "/images/icons/BPR.png"; +import bridgeIcon from "/images/icons/Bridge.png"; +import dpeIcon from "/images/icons/DPE.png"; + +const waysToJoin = ["General Member", "Partner Club", "External Sponsor"]; const JoinUs = () => { + const PCS_GMAIL = "pcs.berkeley@gmail.com"; + const PCS_INSTAGRAM = "https://www.instagram.com/pcs_berkeley/"; + const theme = useTheme(); + + const purpleCardStyle = { + // bgcolor: theme.palette.secondary.light, + backgroundImage: purpleMeshStyles, + py: 1, + px: 4, + }; + const greyBox = { borderRadius: "6px", bgcolor: "#D9D9D9", width: "50%" }; + const bold = { fontWeight: 'bold' }; + + const inlineLink = { + ...bold, + ...purpleInlineText(theme), + textDecoration: "none", + }; + const leftIcon = (src) => ( + + ); + const clubImage = (src) => ( + + ); + const purpleCard = (text: string) => ( + + + {text.split(" ")[0]} + + + {text.split(" ")[1]} + + + ); + const overview = ( + <> + + + {" "} + { + + {" "} + Join Us{" "} + + }{" "} + as a ... + {" "} + + + {waysToJoin.map(purpleCard)} + + + ); + + const generalMember = ( + + {leftIcon(generalMemberIcon)} + + General Member + + {" "} + New members are accepted twice a year during Fall and Spring + recruitment cycles. More details on the current process can be found + [here].{" "} + + + + + Who Can Join? + + Current UC Berkeley undergraduate & graduate students. + + + Note: While we are a majority undergrad club, our community and + conversations are enriched by our non-traditional, transfer, and + graduate level members. + + + + + + + How Do I Join? + + The recruitment process may change slightly between cycles but + generally consists of two stages: +
    +
  1. Brief application
  2. +
  3. Short, in-person interview.
  4. +
+ Applicants who advance past both steps are invited to join the + club. +
+
+
+
+
{" "} +
+ ); + + const partnerClub = ( + + {leftIcon(partnerClubIcon)} + + Partner Club + + {" "} + PCS collaborates with other student orgs on projects, socials, and + other events. Reach out via{" "} + { + + email + + }{" "} + or{" "} + { + + Instagram + + }{" "} + and let’s create something together! + + {/* */} + + + + + + {clubImage(berkeleyProjectIcon)} + {clubImage(berIcon)} + {clubImage(bridgeIcon)} + {clubImage(dpeIcon)} + + + + ); + + const externalSponsor = ( + + {leftIcon(externalSponsorIcon)} + + External Sponsor + + {" "} + Whether you’re looking for support on an {existing project} or want to + explore a new research area, PCS members bring interdisciplinary + skillsets, creative solutions, and meaningful results to our + partnerships with external organizations.{" "} + + + {clubImage(citrisImage)} + {clubImage(linkHealthImage)} + + {" "} + + ); + + const emailForm = ""; /*TODO*/ + return ( -
- -
- ) -} + <> + + {overview} + {generalMember} + {partnerClub} + {externalSponsor} + {emailForm} +