From c5d34fd668da43347c3a7dcabf975cda660308fc Mon Sep 17 00:00:00 2001 From: Joep Meindertsma Date: Thu, 28 Aug 2025 13:57:02 +0200 Subject: [PATCH 1/5] Campaigns WIP --- src/lib/components/CampaignCard.svelte | 82 +++++++++++++++++++ src/lib/components/CampaignsCarousel.svelte | 18 ++++ src/lib/components/Home.svelte | 3 + src/lib/components/QuotesCarousel.svelte | 72 +++------------- src/lib/data/campaigns.ts | 27 ++++++ src/lib/types.ts | 8 ++ src/posts/deepmind-promises-campaign.md | 37 +++++++++ .../if-anyone-builds-it-everyone-dies.md | 15 ++++ src/posts/openai-breach-bioweapons.md | 11 +++ src/routes/campaigns/+page.svelte | 31 +++++++ src/routes/campaigns/meta.ts | 9 ++ src/styles/styles.css | 3 +- 12 files changed, 253 insertions(+), 63 deletions(-) create mode 100644 src/lib/components/CampaignCard.svelte create mode 100644 src/lib/components/CampaignsCarousel.svelte create mode 100644 src/lib/data/campaigns.ts create mode 100644 src/posts/deepmind-promises-campaign.md create mode 100644 src/posts/if-anyone-builds-it-everyone-dies.md create mode 100644 src/posts/openai-breach-bioweapons.md create mode 100644 src/routes/campaigns/+page.svelte create mode 100644 src/routes/campaigns/meta.ts diff --git a/src/lib/components/CampaignCard.svelte b/src/lib/components/CampaignCard.svelte new file mode 100644 index 000000000..3b6b5b48e --- /dev/null +++ b/src/lib/components/CampaignCard.svelte @@ -0,0 +1,82 @@ + + +
+ {title} +
+

{title}

+

{description}

+ Visit Campaign +
+
+ + diff --git a/src/lib/components/CampaignsCarousel.svelte b/src/lib/components/CampaignsCarousel.svelte new file mode 100644 index 000000000..db5336197 --- /dev/null +++ b/src/lib/components/CampaignsCarousel.svelte @@ -0,0 +1,18 @@ + + +
+ {#each campaigns as campaign} + + {/each} +
+ + diff --git a/src/lib/components/Home.svelte b/src/lib/components/Home.svelte index 45f942097..69c93682a 100644 --- a/src/lib/components/Home.svelte +++ b/src/lib/components/Home.svelte @@ -4,6 +4,7 @@ import QuotesCarousel from '$lib/components/QuotesCarousel.svelte' import Stats from '$lib/components/Stats.svelte' import * as m from '$lib/paraglide/messages.js' + import CampaignsCarousel from '$lib/components/CampaignsCarousel.svelte' const title = 'We need to Pause AI' const description = 'We are risking human extinction. We need to pause AI development, right now.' @@ -46,6 +47,8 @@ + + diff --git a/src/routes/campaigns/meta.ts b/src/routes/campaigns/meta.ts new file mode 100644 index 000000000..efe6d3db5 --- /dev/null +++ b/src/routes/campaigns/meta.ts @@ -0,0 +1,9 @@ +import type { Post } from '$lib/types' + +export const meta: Post = { + title: 'PauseAI Campaigns', + description: 'Currently running campaigns organized by PauseAI', + date: '2025-10-27', + slug: 'campaigns', + categories: [] +} diff --git a/src/styles/styles.css b/src/styles/styles.css index dd59e821b..0297fe5dd 100644 --- a/src/styles/styles.css +++ b/src/styles/styles.css @@ -56,7 +56,7 @@ html { --text: white; --bg: black; --bg-subtle: hsl(32, 100%, 20%); - --text-subtle: hsl(32, 0%, 15%); + --text-subtle: hsl(0, 0%, 70%); --bg-secondary: hsl(0, 0%, 10%); } @@ -66,6 +66,7 @@ html { --brand: var(--brand-light); --brand-subtle: hsl(32, 100%, 35%); --text: black; + --text-subtle: hsl(0, 0%, 40%); --bg-secondary: white; } From 6f95bf6c2899b3348c6174c19ec4b2a1c5544562 Mon Sep 17 00:00:00 2001 From: Joep Meindertsma Date: Thu, 28 Aug 2025 14:16:42 +0200 Subject: [PATCH 2/5] Design & all campaings links --- src/lib/components/CampaignCard.svelte | 20 +++++++++++-------- src/lib/components/CampaignsCarousel.svelte | 4 ++++ src/posts/deepmind-promises-campaign.md | 11 +++++----- .../if-anyone-builds-it-everyone-dies.md | 2 ++ src/posts/openai-breach-bioweapons.md | 2 ++ 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/lib/components/CampaignCard.svelte b/src/lib/components/CampaignCard.svelte index 3b6b5b48e..7300c7e11 100644 --- a/src/lib/components/CampaignCard.svelte +++ b/src/lib/components/CampaignCard.svelte @@ -6,30 +6,34 @@ const { title, description, image, url, isCurrent } = campaign - + From 3f4eec31e40d2259de7a1047642b95139bebba0d Mon Sep 17 00:00:00 2001 From: Wituareard <87208350+Wituareard@users.noreply.github.com> Date: Thu, 28 Aug 2025 23:39:38 +0200 Subject: [PATCH 4/5] Revert QuotesCarousel --- src/lib/components/QuotesCarousel.svelte | 72 ++++++++++++++++++++---- 1 file changed, 62 insertions(+), 10 deletions(-) diff --git a/src/lib/components/QuotesCarousel.svelte b/src/lib/components/QuotesCarousel.svelte index 631d39a5a..c69e663f3 100644 --- a/src/lib/components/QuotesCarousel.svelte +++ b/src/lib/components/QuotesCarousel.svelte @@ -20,6 +20,7 @@ import * as m from '$lib/paraglide/messages' import Link from '$lib/components/custom/a.svelte' + const MOBILE_NAVIGATION_DISTANCE_THRESHOLD = 10 const AUTOPLAY_INTERVAL = 10_000 let glide: Glide @@ -67,20 +68,53 @@ const totalSlides = quotes.length onMount(() => { - setTimeout(() => { - glide = new Glide('.quotes-carousel', { - autoplay: AUTOPLAY_INTERVAL, - perView: 1 - }).mount({ Controls, Images, Keyboard, Swipe, Autoplay }) + glide = new Glide('.glide', { + autoplay: AUTOPLAY_INTERVAL + }).mount({ Controls, Images, Keyboard, Swipe, Autoplay }) + currentSlide = glide.index + glide.on('move', () => { currentSlide = glide.index - glide.on('move', () => { - currentSlide = glide.index - }) - }, 100) + }) + registerMobileNavigation() }) + + type ClientCoordinates = { clientX: number; clientY: number } + let interactionStart: ClientCoordinates | null = null + + function registerMobileNavigation() { + addEventListener('touchstart', (event) => (interactionStart = event.changedTouches[0])) + addEventListener('mousedown', (event) => (interactionStart = event)) + + const touchNavigationButtons = document.getElementsByClassName( + 'touch-navigation' + ) as HTMLCollectionOf + window.addEventListener('click', (event) => { + if (!interactionStart) return + for (const touchNavigationButton of touchNavigationButtons) { + const boundingClientRect = touchNavigationButton.getBoundingClientRect() + if ( + isInside(event, boundingClientRect) && + calculateDistance(interactionStart, event) <= MOBILE_NAVIGATION_DISTANCE_THRESHOLD + ) { + // HTMLElement#click bubbles, leading to recursion + return touchNavigationButton.dispatchEvent(new Event('click')) + } + } + }) + } + + function isInside({ clientX, clientY }: ClientCoordinates, rect: DOMRect) { + return ( + clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom + ) + } + + function calculateDistance(from: ClientCoordinates, to: ClientCoordinates) { + return Math.hypot(to.clientX - from.clientX, to.clientY - from.clientY) + } -