From 67ca184027caa905dd20bde26e163835676930ab Mon Sep 17 00:00:00 2001 From: Shreyas Raorane Date: Mon, 16 Feb 2026 11:11:34 -0500 Subject: [PATCH 01/10] video slider added --- src/components/VideoSlider.tsx | 131 +++++++++++++++++++++++++++++++++ src/pages/Landing.tsx | 21 ++++++ 2 files changed, 152 insertions(+) create mode 100644 src/components/VideoSlider.tsx diff --git a/src/components/VideoSlider.tsx b/src/components/VideoSlider.tsx new file mode 100644 index 0000000..ea019d4 --- /dev/null +++ b/src/components/VideoSlider.tsx @@ -0,0 +1,131 @@ +import { useCallback, useEffect, useState } from 'react'; +import useEmblaCarousel from 'embla-carousel-react'; + +interface VideoSliderProps { + videos: string[]; +} + +export default function VideoSlider({ videos }: VideoSliderProps) { + const [emblaRef, emblaApi] = useEmblaCarousel({ + loop: true, + align: 'center', + }); + const [selectedIndex, setSelectedIndex] = useState(0); + const [scrollSnaps, setScrollSnaps] = useState([]); + + const scrollPrev = useCallback(() => { + if (emblaApi) emblaApi.scrollPrev(); + }, [emblaApi]); + + const scrollNext = useCallback(() => { + if (emblaApi) emblaApi.scrollNext(); + }, [emblaApi]); + + const scrollTo = useCallback( + (index: number) => { + if (emblaApi) emblaApi.scrollTo(index); + }, + [emblaApi] + ); + + const onSelect = useCallback(() => { + if (!emblaApi) return; + setSelectedIndex(emblaApi.selectedScrollSnap()); + }, [emblaApi]); + + useEffect(() => { + if (!emblaApi) return; + onSelect(); + setScrollSnaps(emblaApi.scrollSnapList()); + emblaApi.on('select', onSelect); + return () => { + emblaApi.off('select', onSelect); + }; + }, [emblaApi, onSelect]); + + // Convert YouTube URLs to embed format + const getEmbedUrl = (url: string) => { + const videoId = url.match(/(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/watch\?.+&v=))([^&\n?#]+)/)?.[1]; + return `https://www.youtube.com/embed/${videoId}`; + }; + + return ( +
+ {/* Carousel */} +
+
+ {videos.map((video, index) => ( +
+
+ */} +

Upcoming Events

+
+ {upcomingEvents.map((event, index) => { + const isTechfest = + (event.title && event.title.toLowerCase().includes("techfest")) || + (event.url && event.url.includes("techfest")); + + return ( +
{ + if (isTechfest) { + setInlineEventTitle(event.title ?? null); + setShowEventsInline((s) => !s); + } else { + setShowEventsInline(false); + } + }} + > +

{event.title}

+ {event.dates &&

{event.dates}

} + {event.location &&

{event.location}

} + {event.url && ( + e.stopPropagation()} + > + View details + + )} +
+ ); + })} +
+ + {/* Inline events content (e.g. Events page) */} + {showEventsInline && ( +
+ +
+ )} + +

Past Events

+
+ {pastRaces.map((race, index) => ( + +

{race.name}

+
+ ))} +
+
+ ); + } diff --git a/src/pages/RaceLanding.tsx b/src/pages/RaceLanding.tsx new file mode 100644 index 0000000..3525da2 --- /dev/null +++ b/src/pages/RaceLanding.tsx @@ -0,0 +1,192 @@ +import { Link } from "react-router-dom"; + +export default function RaceLanding() { + return ( +
+ {/* Hero Section */} +
+
+
+
+ 🏁 Compete & Race +
+

+ Compete in Autonomous Racing +

+

+ Join international competitions, test your algorithms against the best, and push the boundaries of autonomous racing technology. +

+
+ + View Upcoming Events + + + + + + Competition Rules + +
+
+
+ + {/* Competition Types Section */} +
+
+

+ Competition Formats +

+
+
+
+

Time Trials

+

+ Race against the clock to achieve the fastest lap times on challenging tracks with tight corners and obstacles. +

+
+
+
🏎️
+

Head-to-Head Racing

+

+ Compete directly against other autonomous vehicles, requiring strategic overtaking and defensive driving. +

+
+
+
🌐
+

Multi-Agent Scenarios

+

+ Coordinate with teammates or compete in complex scenarios with multiple vehicles on track. +

+
+
+
+
+ + {/* Event Highlights Section */} +
+
+

+ Racing Opportunities +

+
+
+

📅 Upcoming Events

+

+ View the schedule of upcoming competitions, workshops, and racing events worldwide. +

+ + See Schedule → + +
+
+

📋 Competition Rules

+

+ Learn about race formats, technical requirements, and competition guidelines. +

+ + Read Rules → + +
+
+

🏆 Past Results

+

+ Browse results and highlights from previous competitions around the world. +

+ + View Results → + +
+
+

🎯 Practice

+

+ Test your algorithms in simulation before competing in real-world events. +

+ + Launch Simulator → + +
+
+
+
+ + {/* Stats Section */} +
+
+

+ Global Racing Community +

+
+
+
24+
+
International Events
+
+
+
20+
+
Countries
+
+
+
100+
+
Racing Teams
+
+
+
+
+ + {/* Locations Section */} +
+
+

+ Race Around the World +

+

+ We've hosted competitions in major cities including New York, Pittsburgh, Portugal, South Korea, Italy, Canada, and more. +

+
+ {['🇺🇸 USA', '🇵🇹 Portugal', '🇰🇷 South Korea', '🇮🇹 Italy', '🇨🇦 Canada', '🇬🇧 UK', '🇩🇪 Germany', '🇯🇵 Japan'].map((location) => ( + + {location} + + ))} +
+
+
+ + {/* CTA Section */} +
+
+

+ Ready to Race? +

+

+ Join our next competition and test your autonomous racing skills against the world's best. +

+
+ + View Upcoming Events + + + + + + Join Community + +
+
+
+
+ ); +} From 76ad6d04ec643fe20ccad3e6d63ff6e84afc21cb Mon Sep 17 00:00:00 2001 From: Shreyas Raorane Date: Mon, 16 Feb 2026 12:09:41 -0500 Subject: [PATCH 06/10] upadted statistics --- src/pages/Landing.tsx | 2 +- src/pages/LearnLanding.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/Landing.tsx b/src/pages/Landing.tsx index 1b89c33..6e29d79 100644 --- a/src/pages/Landing.tsx +++ b/src/pages/Landing.tsx @@ -9,7 +9,7 @@ import VideoSlider from "../components/VideoSlider"; const STATS = [ { number: '90+', label: 'Universities' }, { number: '20+', label: 'Countries' }, - { number: '60+', label: 'Publications' }, + { number: '2000+', label: 'Community Members' }, ]; const PILLARS = [ diff --git a/src/pages/LearnLanding.tsx b/src/pages/LearnLanding.tsx index 8fb72fc..99e188f 100644 --- a/src/pages/LearnLanding.tsx +++ b/src/pages/LearnLanding.tsx @@ -149,8 +149,8 @@ export default function LearnLanding() {
Countries Worldwide
-
60+
-
Research Publications
+
2000+
+
Community Members
From d6ec5fa81e6738b1f7369595cb7b2e3562dab3b3 Mon Sep 17 00:00:00 2001 From: Shreyas Raorane Date: Mon, 16 Feb 2026 12:16:53 -0500 Subject: [PATCH 07/10] footer added --- src/components/Footer.tsx | 4 ++-- src/components/Layout.tsx | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index e0d8022..cc8d4d3 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -3,8 +3,8 @@ import { useLocation } from "react-router-dom"; export default function Footer() { const location = useLocation(); const isAltFooter = - location.pathname === "/learn" || - location.pathname === "/build" || + location.pathname === "/learn/coursekit" || + location.pathname === "/build/docs" || location.pathname === "/course"; if (isAltFooter) return null; diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 3da840f..1089cc8 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -6,14 +6,14 @@ import { useLocation } from "react-router-dom"; export default function Layout() { const location = useLocation(); const currentPath = location.pathname; - const isAltLayout = currentPath === "/learn" || currentPath === "/build" || currentPath === "/course"; + const isAltLayout = currentPath === "/learn/coursekit" || currentPath === "/build/docs" || currentPath === "/course"; return ( -
+
-
+
-
+ {!isAltLayout &&
}
); } From b73a11fcd0156e9f703307dde785eb93fafe803d Mon Sep 17 00:00:00 2001 From: Shreyas Raorane Date: Mon, 16 Feb 2026 14:45:48 -0500 Subject: [PATCH 08/10] Locations commented for the time being --- src/pages/RaceLanding.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/RaceLanding.tsx b/src/pages/RaceLanding.tsx index 3525da2..bc34af5 100644 --- a/src/pages/RaceLanding.tsx +++ b/src/pages/RaceLanding.tsx @@ -139,7 +139,7 @@ export default function RaceLanding() { {/* Locations Section */} -
+ {/*

Race Around the World @@ -155,7 +155,7 @@ export default function RaceLanding() { ))}

- + */} {/* CTA Section */}
From aa58bca0de92d83dd7e8810aa10905aa5ad7608f Mon Sep 17 00:00:00 2001 From: Shreyas Raorane Date: Mon, 2 Mar 2026 13:32:57 -0500 Subject: [PATCH 09/10] Slack link chnage --- public/rules.md | 2 +- src/components/Footer.tsx | 2 +- src/components/NavBar.tsx | 4 ++-- src/pages/BuildLanding.tsx | 4 ++-- src/pages/Landing.tsx | 11 ++--------- src/pages/RaceLanding.tsx | 2 +- 6 files changed, 9 insertions(+), 16 deletions(-) diff --git a/public/rules.md b/public/rules.md index a9ed479..cb424c7 100644 --- a/public/rules.md +++ b/public/rules.md @@ -32,7 +32,7 @@ The competition is organized as an in-person competition. Teams can register for the competition using a [registration form](https://forms.gle/FdfY9sKXREdu772u6). -The preferred communication method with the organizers is the _#ICRA2025_ channel on [Roboracer-teams Slack](https://join.slack.com/t/robo-racer/shared_invite/zt-2pq4fuyjq-gTUflzeZDKDDGjuVoeZqNg). +The preferred communication method with the organizers is the _#ICRA2025_ channel on [Roboracer-teams Slack](https://join.slack.com/t/robo-racer/shared_invite/zt-3r2d2fe4k-6pvIKjwJH_M28DTyEuR5uQ). # 2. In-person (physical) competition diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index cc8d4d3..938df26 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -67,7 +67,7 @@ export default function Footer() { diff --git a/src/pages/Landing.tsx b/src/pages/Landing.tsx index 6e29d79..8877196 100644 --- a/src/pages/Landing.tsx +++ b/src/pages/Landing.tsx @@ -111,7 +111,7 @@ export default function Landing() { {/* CTA Button */} - - Join on Slack - + href="https://join.slack.com/t/robo-racer/shared_invite/zt-3r2d2fe4k-6pvIKjwJH_M28DTyEuR5uQ"
{/* Right Column: Image */} diff --git a/src/pages/RaceLanding.tsx b/src/pages/RaceLanding.tsx index bc34af5..6e02ff9 100644 --- a/src/pages/RaceLanding.tsx +++ b/src/pages/RaceLanding.tsx @@ -177,7 +177,7 @@ export default function RaceLanding() { Date: Mon, 2 Mar 2026 13:34:49 -0500 Subject: [PATCH 10/10] Slack link updte --- src/pages/Landing.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pages/Landing.tsx b/src/pages/Landing.tsx index 8877196..0ca7800 100644 --- a/src/pages/Landing.tsx +++ b/src/pages/Landing.tsx @@ -210,7 +210,14 @@ export default function Landing() { Connect with researchers, students, and autonomous racing enthusiasts from around the world. Get support, share insights, and collaborate on cutting-edge robotics projects.

+ + Join on Slack + {/* Right Column: Image */}