diff --git a/components/frontend/src/lib/components/hackathon/CtaSection.svelte b/components/frontend/src/lib/components/hackathon/CtaSection.svelte index ff72ffdb..85886419 100644 --- a/components/frontend/src/lib/components/hackathon/CtaSection.svelte +++ b/components/frontend/src/lib/components/hackathon/CtaSection.svelte @@ -7,23 +7,34 @@ buttonLabel, buttonHref, note, + external = false, }: { heading: string; subtitle: string; buttonLabel: string; buttonHref: string; note?: string; + // Opt in for an off-site buttonHref: marks the link outgoing the way the + // rest of the app does. Left off, the button navigates in-app as before. + external?: boolean; } = $props();

{heading}

{subtitle}

- - + + {buttonLabel} + {#if note} {note} {/if} diff --git a/components/frontend/src/routes/(public)/+page.svelte b/components/frontend/src/routes/(public)/+page.svelte index 994a234c..06d6ada7 100644 --- a/components/frontend/src/routes/(public)/+page.svelte +++ b/components/frontend/src/routes/(public)/+page.svelte @@ -3,14 +3,10 @@ import { ArrowRight, Code, - Trophy, - Archive, Users, Lightbulb, Upload, Vote, - ChevronLeft, - ChevronRight, } from 'lucide-svelte'; import HackathonRow from '$lib/components/hackathon/HackathonRow.svelte'; import CtaSection from '$lib/components/hackathon/CtaSection.svelte'; @@ -41,20 +37,25 @@ return GRADIENTS[i % GRADIENTS.length]!; } - let carouselIndex = $state(0); - const carouselSlides = [ - { src: '/images/hackathon-ord-2024/ambiance/ambiance_1.webp', caption: 'ORD Hackathon 2024 — Opening ceremony' }, - { src: '/images/hackathon-ord-2024/teams/teams_1.webp', caption: 'ORD Hackathon 2024 — Team collaboration' }, - { src: '/images/hackathon-ord-2024/ambiance/ambiance_3.webp', caption: 'ORD Hackathon 2024 — Working sessions' }, - { src: '/images/hackathon-ord-2024/winners/winners_1.webp', caption: 'ORD Hackathon 2024 — Award ceremony' }, + // Same shape and light/dark handling as OrganizersSection: a dark asset when + // one exists, otherwise invert the light-on-transparent source. Only these + // three have logo assets in static/ today. + const INSTITUTIONS = [ + { + name: 'SDSC', + url: 'https://datascience.ch', + logoUrl: '/logos/sdsc.svg', + logoDarkUrl: '/logos/sdsc_white.svg', + }, + { name: 'ETH Zurich', url: 'https://ethz.ch', logoUrl: '/images/logos/eth-zurich.svg' }, + { name: 'EPFL', url: 'https://epfl.ch', logoUrl: '/images/logos/epfl.svg' }, ]; - function nextSlide() { - carouselIndex = (carouselIndex + 1) % carouselSlides.length; - } - function prevSlide() { - carouselIndex = (carouselIndex - 1 + carouselSlides.length) % carouselSlides.length; - } + // Matches AppFooter's LOGO_LINK. + const LOGO_LINK = 'no-underline opacity-80 transition-opacity hover:opacity-100'; + + // The same destination AppFooter's "Contact" link points at. + const SDSC_CONTACT_URL = 'https://datascience.ch/contact'; @@ -102,24 +103,13 @@
- -
-
-

Award-winning projects

- See all → -
- -
- {#each [ - { hackathon: 'ORD Hackathon 2025', project: 'AutoORD: Automated\nResearch Data Pipelines', team: 'by Team DataFlow', summary: 'Automated pipeline for converting raw research data into FAIR-compliant open datasets.' }, - { hackathon: 'GenAI Hackathon 2025', project: 'GenomeLens', team: 'by BioViz Crew', summary: 'Interactive visualization of genomic variants powered by generative models.' }, - { hackathon: 'Climate Data 2025', project: 'ClimateQA', team: 'by Green Bytes', summary: 'RAG-based Q&A trained on Swiss climate data, making decades of measurements queryable.' }, - ] as card, i (i)} -
-
-
- - 1st Place -
- {card.hackathon} -
-
-

{card.project}

- {card.team} -

{card.summary}

-
-
- {/each} -
-
- - -
-
-

Event showcase

-
- - -
-
- -
-
- {#each carouselSlides as slide, i (i)} -
-
- {slide.caption} -
-

{slide.caption}

-
- {/each} -
-
- -
- {#each carouselSlides as slide, i (i)} - - {/each} -
-
-
@@ -252,12 +162,36 @@

Trusted by Swiss research institutions

-
- {#each ['SDSC', 'ETH Zurich', 'EPFL', 'Univ. of Bern', 'Univ. of Zurich', 'SOAD'] as name, i (i)} -
-
- {name} -
+
+ {#each INSTITUTIONS as org, i (i)} + + + {#if org.logoDarkUrl} + {org.name} + + {:else} + {org.name} + {/if} + + {/each}
@@ -266,7 +200,8 @@ heading="Want to host your own hackathon?" subtitle="SDSC provides the platform, tools, and expertise. Bring your challenge — we'll help you run it." buttonLabel="Contact Us" - buttonHref={resolve('/')} + buttonHref={SDSC_CONTACT_URL} + external />