From feeb31dc707acd3432e0fe288ecefd5396f44164 Mon Sep 17 00:00:00 2001 From: Sabine Maennel <5292683+sabinem@users.noreply.github.com> Date: Fri, 21 Aug 2026 17:06:45 +0200 Subject: [PATCH 1/3] fix(frontend): drop Challenges and Past Events tabs from landing page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The public landing page's Trending section showed three tabs, but only Hackathons was ever backed by data — the other two were inert chips. Remove them and the now-unused Archive icon import. --- components/frontend/src/routes/(public)/+page.svelte | 9 --------- 1 file changed, 9 deletions(-) diff --git a/components/frontend/src/routes/(public)/+page.svelte b/components/frontend/src/routes/(public)/+page.svelte index 994a234c..892960c1 100644 --- a/components/frontend/src/routes/(public)/+page.svelte +++ b/components/frontend/src/routes/(public)/+page.svelte @@ -4,7 +4,6 @@ ArrowRight, Code, Trophy, - Archive, Users, Lightbulb, Upload, @@ -112,14 +111,6 @@ Hackathons - -
From c5767914ba2a7442cd021aa9dcb221d0cd8f352a Mon Sep 17 00:00:00 2001 From: Sabine Maennel <5292683+sabinem@users.noreply.github.com> Date: Fri, 21 Aug 2026 17:09:00 +0200 Subject: [PATCH 2/3] fix(frontend): trim placeholder sections from public landing page The Trending tab bar offered Challenges and Past Events tabs that were inert chips over unfiltered data, and the Award-winning projects and Event showcase sections rendered hardcoded placeholder content with no backing data. Remove all three, along with the icons, state and helpers they were the only users of. --- .../frontend/src/routes/(public)/+page.svelte | 97 ------------------- 1 file changed, 97 deletions(-) diff --git a/components/frontend/src/routes/(public)/+page.svelte b/components/frontend/src/routes/(public)/+page.svelte index 892960c1..66b1ed41 100644 --- a/components/frontend/src/routes/(public)/+page.svelte +++ b/components/frontend/src/routes/(public)/+page.svelte @@ -3,13 +3,10 @@ import { ArrowRight, Code, - Trophy, 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'; @@ -40,20 +37,6 @@ 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' }, - ]; - - function nextSlide() { - carouselIndex = (carouselIndex + 1) % carouselSlides.length; - } - function prevSlide() { - carouselIndex = (carouselIndex - 1 + carouselSlides.length) % carouselSlides.length; - } @@ -132,86 +115,6 @@
- -
-
-

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} -
-
-
From be6fc9ea1a8eb9c1cd64b8c37de779f77a27f518 Mon Sep 17 00:00:00 2001 From: Sabine Maennel <5292683+sabinem@users.noreply.github.com> Date: Fri, 21 Aug 2026 17:45:32 +0200 Subject: [PATCH 3/3] fix(frontend): show real institution logos and fix landing page links MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "Trusted by Swiss research institutions" row rendered an empty bordered square per institution — placeholder markup with no at all, so there were never any logos to load. Wire up the three we hold assets for and drop Univ. of Bern, Univ. of Zurich and SOAD, which have none. Light and dark follow OrganizersSection: SDSC swaps to its dedicated white asset, while ETH and EPFL ship white-on-transparent and get inverted for the light canvas. SDSC cannot take the same treatment — inverting its brand navy and green would misrender both. The logos now link to the institutions, marked outgoing the way the rest of the app marks them (target, rel, and an aria hint, since _blank alone is not reliably announced). No ExternalLink icon: that is the convention for text affordances, and AppFooter's equivalent logo row carries none. Also on this page: "Contact Us" pointed at resolve('/'), bouncing the visitor back to the page they were already on, so send it to the same SDSC contact page AppFooter links. That needs CtaSection to mark an off-site button outgoing, added as an opt-in `external` prop — the other call site passes an internal href and must keep navigating in-app. And drop the "Browse all" link, which also went nowhere but here. --- .../components/hackathon/CtaSection.svelte | 15 ++++- .../frontend/src/routes/(public)/+page.svelte | 63 +++++++++++++++---- 2 files changed, 65 insertions(+), 13 deletions(-) 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 66b1ed41..06d6ada7 100644 --- a/components/frontend/src/routes/(public)/+page.svelte +++ b/components/frontend/src/routes/(public)/+page.svelte @@ -37,6 +37,25 @@ return GRADIENTS[i % GRADIENTS.length]!; } + // 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' }, + ]; + + // 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'; @@ -84,10 +103,7 @@