From 84cae44cd2af8eb183ddbcf109bd5157872dbe11 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Fri, 10 Oct 2025 18:24:42 +0300 Subject: [PATCH] Ship activation experiments (#9170) * ship onboarding experiments * delete logged out cta * delete other loggedoutcta --- src/components/LoggedOutCTA.tsx | 82 ------------------- src/lib/statsig/gates.ts | 4 - src/screens/Onboarding/index.tsx | 15 ++-- .../components/ThreadItemAnchor.tsx | 6 +- src/screens/PostThread/index.tsx | 3 - 5 files changed, 7 insertions(+), 103 deletions(-) delete mode 100644 src/components/LoggedOutCTA.tsx diff --git a/src/components/LoggedOutCTA.tsx b/src/components/LoggedOutCTA.tsx deleted file mode 100644 index de0e23dc96..0000000000 --- a/src/components/LoggedOutCTA.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import {View, type ViewStyle} from 'react-native' -import {msg, Trans} from '@lingui/macro' -import {useLingui} from '@lingui/react' - -import {type Gate} from '#/lib/statsig/gates' -import {useGate} from '#/lib/statsig/statsig' -import {isWeb} from '#/platform/detection' -import {useSession} from '#/state/session' -import {useLoggedOutViewControls} from '#/state/shell/logged-out' -import {Logo} from '#/view/icons/Logo' -import {atoms as a, useTheme} from '#/alf' -import {Button, ButtonText} from '#/components/Button' -import {Text} from '#/components/Typography' - -interface LoggedOutCTAProps { - style?: ViewStyle - gateName: Gate -} - -export function LoggedOutCTA({style, gateName}: LoggedOutCTAProps) { - const {hasSession} = useSession() - const {requestSwitchToAccount} = useLoggedOutViewControls() - const gate = useGate() - const t = useTheme() - const {_} = useLingui() - - // Only show for logged-out users on web - if (hasSession || !isWeb) { - return null - } - - // Check gate at the last possible moment to avoid counting users as exposed when they won't see the element - if (!gate(gateName)) { - return null - } - - return ( - - - - - - - Join Bluesky - - - The open social network. - - - - - - - ) -} diff --git a/src/lib/statsig/gates.ts b/src/lib/statsig/gates.ts index befa993191..1f6c843011 100644 --- a/src/lib/statsig/gates.ts +++ b/src/lib/statsig/gates.ts @@ -1,8 +1,6 @@ export type Gate = // Keep this alphabetic please. | 'alt_share_icon' - | 'cta_above_post_heading' - | 'cta_above_post_replies' | 'debug_show_feedcontext' | 'debug_subscriptions' | 'disable_onboarding_policy_update_notice' @@ -10,8 +8,6 @@ export type Gate = | 'feed_reply_button_open_thread' | 'old_postonboarding' | 'onboarding_add_video_feed' - | 'onboarding_suggested_accounts' - | 'onboarding_value_prop' | 'post_follow_profile_suggested_accounts' | 'remove_show_latest_button' | 'test_gate_1' diff --git a/src/screens/Onboarding/index.tsx b/src/screens/Onboarding/index.tsx index f13402ece2..b587ac7855 100644 --- a/src/screens/Onboarding/index.tsx +++ b/src/screens/Onboarding/index.tsx @@ -2,7 +2,6 @@ import {useMemo, useReducer} from 'react' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' -import {useGate} from '#/lib/statsig/statsig' import { Layout, OnboardingControls, @@ -13,21 +12,19 @@ import {StepFinished} from '#/screens/Onboarding/StepFinished' import {StepInterests} from '#/screens/Onboarding/StepInterests' import {StepProfile} from '#/screens/Onboarding/StepProfile' import {Portal} from '#/components/Portal' -import {ENV} from '#/env' import {StepSuggestedAccounts} from './StepSuggestedAccounts' export function Onboarding() { const {_} = useLingui() - const gate = useGate() - const showValueProp = ENV !== 'e2e' && gate('onboarding_value_prop') - const showSuggestedAccounts = - ENV !== 'e2e' && gate('onboarding_suggested_accounts') + const [state, dispatch] = useReducer(reducer, { ...initialState, - totalSteps: showSuggestedAccounts ? 4 : 3, + totalSteps: 4, experiments: { - onboarding_suggested_accounts: showSuggestedAccounts, - onboarding_value_prop: showValueProp, + // let's leave this flag logic in for now to avoid rebase churn + // TODO: remove this flag logic once we've finished with all experiments -sfn + onboarding_suggested_accounts: true, + onboarding_value_prop: true, }, }) diff --git a/src/screens/PostThread/components/ThreadItemAnchor.tsx b/src/screens/PostThread/components/ThreadItemAnchor.tsx index 301124aaa8..b789297fe7 100644 --- a/src/screens/PostThread/components/ThreadItemAnchor.tsx +++ b/src/screens/PostThread/components/ThreadItemAnchor.tsx @@ -39,13 +39,12 @@ import { OUTER_SPACE, REPLY_LINE_WIDTH, } from '#/screens/PostThread/const' -import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {atoms as a, useTheme} from '#/alf' import {colors} from '#/components/Admonition' import {Button} from '#/components/Button' import {CalendarClock_Stroke2_Corner0_Rounded as CalendarClockIcon} from '#/components/icons/CalendarClock' import {Trash_Stroke2_Corner0_Rounded as TrashIcon} from '#/components/icons/Trash' import {InlineLinkText, Link} from '#/components/Link' -import {LoggedOutCTA} from '#/components/LoggedOutCTA' import {ContentHider} from '#/components/moderation/ContentHider' import {LabelsOnMyPost} from '#/components/moderation/LabelsOnMe' import {PostAlerts} from '#/components/moderation/PostAlerts' @@ -180,7 +179,6 @@ const ThreadItemAnchorInner = memo(function ThreadItemAnchorInner({ const {_} = useLingui() const {openComposer} = useOpenComposer() const {currentAccount, hasSession} = useSession() - const {gtTablet} = useBreakpoints() const feedFeedback = useFeedFeedback(postSource?.feedSourceInfo, hasSession) const formatPostStatCount = useFormatPostStatCount() @@ -315,8 +313,6 @@ const ThreadItemAnchorInner = memo(function ThreadItemAnchorInner({ }, isRoot && [a.pt_lg], ]}> - {/* Show CTA for logged-out visitors - hide on desktop and check gate */} - {!gtTablet && } - {/* Show CTA for logged-out visitors */} - ) } else {