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 @@
- {#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}
-
- {/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 @@