From 52ccc1c99a4cc96c6878fb96582b97704b9fd2f4 Mon Sep 17 00:00:00 2001
From: RisingOrange
Date: Sat, 1 Aug 2026 13:13:56 +0200
Subject: [PATCH 01/10] Prototype V2 two-axis onboarding intent step for design
review
Reworks Step 2 of the signup form into the two-axis model for the onboarding
design meeting (suggestion only, not intended to merge as-is):
- 'Keep me informed' becomes an honest INFORMATIONAL opt-in (global + local
chapter updates), replacing the 'connect me with my local chapter' wording
that gated nothing.
- Involvement tier (Act now / Volunteer / Lead) gates active chapter contact;
Volunteer/Lead auto-include the informational opt-in (shown, not asked).
- Critical-alert floor notice shown under the opt-ins.
- Drops the 'at least one tick' requirement so a critical-alerts-only signup
(privacy box only) is reachable, which the notice's premise assumes.
---
.../onboarding/OnboardingFlow.svelte | 36 +++++++++++++------
1 file changed, 26 insertions(+), 10 deletions(-)
diff --git a/src/lib/components/onboarding/OnboardingFlow.svelte b/src/lib/components/onboarding/OnboardingFlow.svelte
index 1473e6c23..b530bc254 100644
--- a/src/lib/components/onboarding/OnboardingFlow.svelte
+++ b/src/lib/components/onboarding/OnboardingFlow.svelte
@@ -92,6 +92,11 @@
// back so the server updates the record instead of creating another.
let recordId = $state('')
let keepInformed = $state(false)
+ // V2 prototype (two-axis model): the "Keep me informed" checkbox is the
+ // INFORMATIONAL opt-in (global + local-chapter updates). Higher involvement
+ // tiers (Volunteer / Lead) imply it, so we don't ask them about it separately.
+ const informationalHighTier = $derived(intent === 'volunteer' || intent === 'lead')
+ const informationalOptIn = $derived(keepInformed || informationalHighTier)
let submitting = $state(false)
let browseSignedUp = $state(false)
let honeypot = $state('')
@@ -337,9 +342,9 @@
{/snippet}
{#snippet checkboxConfirmations()}
- {#if keepInformed || basics.newsletter}
+ {#if informationalOptIn || basics.newsletter}
+ You can sign up without ticking any of these. We may still occasionally send
+ you a critical alert, and you can unsubscribe from any list at any time. See our
+ privacy policy.
+
+
{msgs.onboarding_intent_more_optional}
{#each intentOptions as option (option.key)}
- You can sign up without ticking any of these. We may still occasionally send
- you a critical alert, and you can unsubscribe from any list at any time. See our
+ We may occasionally send you a critical alert, even if you don't opt into any
+ of these. See our
privacy policy.
{msgs.onboarding_intent_more_optional}
From a9f0fd87b54b729eb751d4b58a8bb9621b31a500 Mon Sep 17 00:00:00 2001
From: RisingOrange
Date: Sat, 1 Aug 2026 17:32:26 +0200
Subject: [PATCH 04/10] Add a list-unsubscribe reassurance to the
critical-alert notice
---
src/lib/components/onboarding/OnboardingFlow.svelte | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lib/components/onboarding/OnboardingFlow.svelte b/src/lib/components/onboarding/OnboardingFlow.svelte
index 14bc8d5b5..fc9071c8d 100644
--- a/src/lib/components/onboarding/OnboardingFlow.svelte
+++ b/src/lib/components/onboarding/OnboardingFlow.svelte
@@ -524,7 +524,7 @@
We may occasionally send you a critical alert, even if you don't opt into any
- of these. See our
+ of these. You can unsubscribe from any list at any time. See our
privacy policy.
- We may occasionally send you a critical alert, even if you don't opt into any
- of these. You can unsubscribe from any list at any time. See our
- privacy policy.
-
-
{msgs.onboarding_intent_more_optional}
+ We may occasionally send you a critical alert, even if you don't opt into any of these.
+ You can unsubscribe from any list at any time. See our
+ privacy policy.
+
+
{msgs.onboarding_intent_more_optional}
{#each intentOptions as option (option.key)}
{@render gdprConsentField()}
-
+
{submitting
? msgs.onboarding_btn_submitting
: intent === 'volunteer' || intent === 'lead'
From e8f25a6394e9d1cd46acf9fbba77849a8a4c3a95 Mon Sep 17 00:00:00 2001
From: RisingOrange
Date: Sat, 1 Aug 2026 17:54:50 +0200
Subject: [PATCH 06/10] Use LinkWithoutIcon for the privacy link in the notice
(eslint)
---
src/lib/components/onboarding/OnboardingFlow.svelte | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lib/components/onboarding/OnboardingFlow.svelte b/src/lib/components/onboarding/OnboardingFlow.svelte
index 8ceab2640..bb39f61f3 100644
--- a/src/lib/components/onboarding/OnboardingFlow.svelte
+++ b/src/lib/components/onboarding/OnboardingFlow.svelte
@@ -525,7 +525,7 @@
We may occasionally send you a critical alert, even if you don't opt into any of these.
You can unsubscribe from any list at any time. See our
- privacy policy.
+ privacy policy.
{msgs.onboarding_intent_more_optional}
From 3ffd7a0951d91fbb0df26788309fa907604111c7 Mon Sep 17 00:00:00 2001
From: RisingOrange
Date: Sat, 1 Aug 2026 19:53:44 +0200
Subject: [PATCH 07/10] Polish from review: clearer bell copy, axis section
label, fix stale gdpr comment
---
src/lib/components/onboarding/OnboardingFlow.svelte | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/lib/components/onboarding/OnboardingFlow.svelte b/src/lib/components/onboarding/OnboardingFlow.svelte
index bb39f61f3..3a5670d39 100644
--- a/src/lib/components/onboarding/OnboardingFlow.svelte
+++ b/src/lib/components/onboarding/OnboardingFlow.svelte
@@ -145,9 +145,9 @@
let becomePayingMember = $state(false)
// GDPR data-processing consent gating every record-creating submission
- // (step 2 + browse). Chapter-sharing consent is not bundled here: it lives
- // in the optional "Keep me informed" opt-in, since we only share details
- // with a local chapter when the person asks to be connected to one.
+ // (step 2 + browse). NB: the server also hardcodes chapter-sharing consent
+ // on every record today — whether that should instead follow the involvement
+ // axis / bell rather than a forced checkbox is an open question (see PR body).
let gdprConsent = $state(false)
// Phone: dial code prefilled from country of residence, editable in case
@@ -481,6 +481,7 @@
{/if}
{msgs.onboarding_step2_heading}
+
Stay in the loop
{msgs.onboarding_intent_keep_informed_label}
- Get global campaign updates and news from your local PauseAI chapter.
+ Get global campaign updates, plus news from your local PauseAI chapter.
Date: Sat, 1 Aug 2026 22:47:35 +0200
Subject: [PATCH 08/10] Reframe the privacy-policy checkbox as
notice-acknowledgement, not agree-to-share
Matches the policy's actual mechanism (chapter sharing disclosed on a
legitimate-interest basis = notice, not consent). Model-agnostic: acknowledgement
works under joint controllership too. The 'shared with a separate entity' framing
is left for the joint-controllership / privacy-policy V3 pass.
---
src/lib/components/onboarding/messages.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lib/components/onboarding/messages.ts b/src/lib/components/onboarding/messages.ts
index 0d3b5bb8e..d999f9394 100644
--- a/src/lib/components/onboarding/messages.ts
+++ b/src/lib/components/onboarding/messages.ts
@@ -209,7 +209,7 @@ const en: OnboardingMessages = {
onboarding_intent_lead_label: 'I want to lead',
onboarding_intent_lead_sub: "I'm ready to organize in my country or region.",
onboarding_gdpr_consent:
- 'I agree to the Privacy Policy, including sharing my details with my local PauseAI chapter (which may be a separate entity to PauseAI Global) for local coordination. *',
+ 'I agree to the Privacy Policy. I understand my details will be shared with my local PauseAI chapter (which may be a separate entity to PauseAI Global) for local coordination. *',
onboarding_btn_submit: 'Submit →',
onboarding_btn_submitting: 'Submitting...',
onboarding_btn_back: '← Back',
From 989eca37521eff9312a6cf2f4e845b9a7d2dda40 Mon Sep 17 00:00:00 2001
From: RisingOrange
Date: Sun, 2 Aug 2026 10:41:03 +0200
Subject: [PATCH 09/10] Rename the opt-ins section label to "Want to hear from
us?"
---
src/lib/components/onboarding/OnboardingFlow.svelte | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lib/components/onboarding/OnboardingFlow.svelte b/src/lib/components/onboarding/OnboardingFlow.svelte
index 3a5670d39..03b1aa2ad 100644
--- a/src/lib/components/onboarding/OnboardingFlow.svelte
+++ b/src/lib/components/onboarding/OnboardingFlow.svelte
@@ -481,7 +481,7 @@
{/if}