From 2eaff866f875053335509aa5a3f93fe0277f74a4 Mon Sep 17 00:00:00 2001 From: Alex Gold Date: Mon, 16 Feb 2026 14:49:17 -0500 Subject: [PATCH 1/4] Randomize the order of the churn reason array every time it's displayed --- .../KiloPassSubscriptionSettingsModal.tsx | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx b/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx index 6915adcf2..d632821a0 100644 --- a/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx +++ b/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx @@ -261,19 +261,22 @@ export function KiloPassSubscriptionSettingsModal(props: SettingsModalProps) { const pendingChange = Boolean(scheduledChange); const showUpdatePanel = panel === 'update'; - const cancellationReasons = useMemo( - () => - [ - 'Too expensive', - 'Not using it enough', - 'Missing features', - 'Bugs / reliability issues', - 'Performance issues', - 'Using another tool', - 'Other', - ] as const, - [] - ); + const cancellationReasons = useMemo(() => { + const reasons = [ + 'Too expensive', + 'Not using it enough', + 'Missing features', + 'Bugs / reliability issues', + 'Performance issues', + 'Using another tool', + ]; + // Fisher-Yates shuffle + for (let i = reasons.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [reasons[i], reasons[j]] = [reasons[j], reasons[i]]; + } + return [...reasons, 'Other'] as const; + }, [isOpen]); const toggleCancellationReason = (reason: string) => { setSelectedCancellationReasons(current => From 6cb44ca9020e814b8e05292ec01b22de62586fe0 Mon Sep 17 00:00:00 2001 From: Alex Gold Date: Mon, 16 Feb 2026 14:55:03 -0500 Subject: [PATCH 2/4] Update src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com> --- .../profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx b/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx index d632821a0..16f00bb15 100644 --- a/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx +++ b/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx @@ -275,7 +275,7 @@ export function KiloPassSubscriptionSettingsModal(props: SettingsModalProps) { const j = Math.floor(Math.random() * (i + 1)); [reasons[i], reasons[j]] = [reasons[j], reasons[i]]; } - return [...reasons, 'Other'] as const; + return [...reasons, 'Other']; }, [isOpen]); const toggleCancellationReason = (reason: string) => { From 5d36fc355afa701bbc6d47ecdae6f3e981e8e542 Mon Sep 17 00:00:00 2001 From: Alex Gold Date: Tue, 17 Feb 2026 09:28:48 -0500 Subject: [PATCH 3/4] Update src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx --- .../profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx b/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx index 16f00bb15..f216c91a6 100644 --- a/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx +++ b/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx @@ -276,7 +276,7 @@ export function KiloPassSubscriptionSettingsModal(props: SettingsModalProps) { [reasons[i], reasons[j]] = [reasons[j], reasons[i]]; } return [...reasons, 'Other']; - }, [isOpen]); + }); const toggleCancellationReason = (reason: string) => { setSelectedCancellationReasons(current => From 296115d197b19317034725a151d87b89ee1668aa Mon Sep 17 00:00:00 2001 From: Alex Gold Date: Tue, 17 Feb 2026 09:36:54 -0500 Subject: [PATCH 4/4] Update src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx Co-authored-by: kiloconnect[bot] <240665456+kiloconnect[bot]@users.noreply.github.com> --- .../profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx b/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx index f216c91a6..e7eb6e908 100644 --- a/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx +++ b/src/components/profile/kilo-pass/KiloPassSubscriptionSettingsModal.tsx @@ -276,7 +276,7 @@ export function KiloPassSubscriptionSettingsModal(props: SettingsModalProps) { [reasons[i], reasons[j]] = [reasons[j], reasons[i]]; } return [...reasons, 'Other']; - }); + }, []); const toggleCancellationReason = (reason: string) => { setSelectedCancellationReasons(current =>