diff --git a/src/App.tsx b/src/App.tsx index 8fd2606..8197fc7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -13,6 +13,7 @@ import Resources from "./pages/Forms"; import TravelReimbursement from "./pages/TravelReimbursement"; import Donate from "./pages/Donate"; import History from "./pages/History"; +import PillarDetail from "./pages/PillarDetail"; import ScrollToTop from "./components/ScrollToTop"; import { CartProvider } from "./lib/CartContext"; @@ -54,6 +55,7 @@ function App() { }> } /> } /> + } /> } /> } /> } /> diff --git a/src/app.css b/src/app.css index c706247..48b5ef4 100644 --- a/src/app.css +++ b/src/app.css @@ -604,6 +604,32 @@ body { .section { @apply py-8 md:py-16 flex flex-col justify-center items-center; + position: relative; +} + +/* Subtle zebra-striping so consecutive sections read as distinct blocks, + on top of the gradient divider line below. */ +.section:nth-of-type(even) { + background-color: rgba(255, 255, 255, 0.025); +} + +/* Soft horizontal divider above every section after the first, giving + each homepage section visual separation without heavy hard lines. */ +.section + .section::before { + content: ""; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + width: min(80rem, 92%); + height: 3px; + background: linear-gradient( + to right, + transparent 0%, + rgba(231, 231, 229, 0.35) 50%, + transparent 100% + ); + pointer-events: none; } .cal-shadow { diff --git a/src/components/Mission.tsx b/src/components/Mission.tsx index 7f78c4c..6de0a69 100644 --- a/src/components/Mission.tsx +++ b/src/components/Mission.tsx @@ -1,49 +1,34 @@ -const perks = [ - { - header: "Professional Development", - description: - "SoDA offers boundless opportunities to advance your career. From technical workshops hosted by industry leaders to career fairs and networking events, you’ll gain invaluable experience and connections to kickstart your journey as a software developer.", - imgURL: "/events/amazon-table.webp", - alt: "Amazon table at a SoDA event", - }, - { - header: "Community and Support", - description: - "SoDA provides a supportive network of fellow computer science students, offering collaboration, encouragement, and a sense of belonging through regular meetings and events with free food.", - imgURL: "/events/microsoft-resume-review.webp", - alt: "Microsoft resume review at a SoDA event", - }, - { - header: "Learning", - description: - "Enhance your skills through a variety of learning opportunities, including coding workshops, bootcamps, and talks from industry professionals. SoDA is committed to your personal and professional growth, ensuring you stay ahead in the fast-paced tech world.", - imgURL: "/events/what-is-soda.webp", - alt: "SoDA members at a meeting", - }, -]; +import { Link } from "react-router-dom"; +import HoverPlayMedia from "./ui/HoverPlayMedia"; +import { pillars } from "../data/pillars"; export default function Mission() { return ( <>

Mission

+

+ SoDA’s mission is to provide an accessible, professional, and fun community for students + interested in building software. +

- {perks.map((perk) => ( -
( + - {pillar.alt}
-

{perk.header}

- {/*
*/} -

{perk.description}

+

{pillar.header}

+

{pillar.description}

-
+ ))}
diff --git a/src/components/Stats/Statistics.tsx b/src/components/Stats/Statistics.tsx index d1ded82..ca4e506 100644 --- a/src/components/Stats/Statistics.tsx +++ b/src/components/Stats/Statistics.tsx @@ -14,7 +14,8 @@ const statistics = [ // value: 22500, // last updated 2020-01-16 (https://github.com/asusoda/asu-soda-oldsite/commit/0813ac24a21dcc190ecfc44b0829825c27d85718) // last known value + semesters since * estimated = 22500 + 10 * 3500 = 57500 // last updated 2025-03-29 //Added the number for Spring 2025 updated 2025-08-25: 61276 - value: 61276, + // Updated 2026-08-25: 63857.20 + value: 63857.2, steps: 3000, formatter: (x: number) => <>{dollarFormatter.format(x)}, }, diff --git a/src/components/ui/HoverPlayMedia.tsx b/src/components/ui/HoverPlayMedia.tsx new file mode 100644 index 0000000..0df079c --- /dev/null +++ b/src/components/ui/HoverPlayMedia.tsx @@ -0,0 +1,43 @@ +import { useRef } from "react"; + +interface HoverPlayMediaProps { + src: string; + videoSrc?: string; + alt: string; + className?: string; +} + +export default function HoverPlayMedia({ src, videoSrc, alt, className }: HoverPlayMediaProps) { + const videoRef = useRef(null); + + if (!videoSrc) { + return {alt}; + } + + const play = () => videoRef.current?.play(); + const reset = () => { + const video = videoRef.current; + if (!video) return; + video.pause(); + video.currentTime = 0; + }; + + return ( +