diff --git a/assets/images/drafts_announcement_nux.webp b/assets/images/drafts_announcement_nux.webp
new file mode 100644
index 0000000000..301589690c
Binary files /dev/null and b/assets/images/drafts_announcement_nux.webp differ
diff --git a/src/components/dialogs/nuxs/DraftsAnnouncement.tsx b/src/components/dialogs/nuxs/DraftsAnnouncement.tsx
new file mode 100644
index 0000000000..4aa358f032
--- /dev/null
+++ b/src/components/dialogs/nuxs/DraftsAnnouncement.tsx
@@ -0,0 +1,154 @@
+import {useCallback} from 'react'
+import {View} from 'react-native'
+import {Image} from 'expo-image'
+import {LinearGradient} from 'expo-linear-gradient'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {atoms as a, useTheme, web} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import * as Dialog from '#/components/Dialog'
+import {useNuxDialogContext} from '#/components/dialogs/nuxs'
+import {Sparkle_Stroke2_Corner0_Rounded as SparkleIcon} from '#/components/icons/Sparkle'
+import {Text} from '#/components/Typography'
+import {IS_E2E, IS_NATIVE, IS_WEB} from '#/env'
+import {createIsEnabledCheck, isExistingUserAsOf} from './utils'
+
+export const enabled = createIsEnabledCheck(props => {
+ return (
+ !IS_E2E &&
+ IS_NATIVE &&
+ isExistingUserAsOf(
+ '2026-02-05T00:00:00.000Z',
+ props.currentProfile.createdAt,
+ )
+ )
+})
+
+export function DraftsAnnouncement() {
+ const t = useTheme()
+ const {_} = useLingui()
+ const nuxDialogs = useNuxDialogContext()
+ const control = Dialog.useDialogControl()
+
+ Dialog.useAutoOpen(control)
+
+ const onClose = useCallback(() => {
+ nuxDialogs.dismissActiveNux()
+ }, [nuxDialogs])
+
+ return (
+
+
+
+
+
+
+
+
+
+ New Feature
+
+
+
+
+
+
+
+ Drafts
+
+
+
+ Not ready to hit post? Keep your best ideas in Drafts until the
+ timing is just right.
+
+
+
+
+ {!IS_WEB && (
+
+ )}
+
+
+
+
+
+ )
+}
diff --git a/src/components/dialogs/nuxs/index.tsx b/src/components/dialogs/nuxs/index.tsx
index ba555befd1..2d2e2c6a6a 100644
--- a/src/components/dialogs/nuxs/index.tsx
+++ b/src/components/dialogs/nuxs/index.tsx
@@ -19,9 +19,9 @@ import {useProfileQuery} from '#/state/queries/profile'
import {type SessionAccount, useSession} from '#/state/session'
import {useOnboardingState} from '#/state/shell'
import {
- enabled as isLiveNowBetaDialogEnabled,
- LiveNowBetaDialog,
-} from '#/components/dialogs/nuxs/LiveNowBetaDialog'
+ DraftsAnnouncement,
+ enabled as isDraftsAnnouncementEnabled,
+} from '#/components/dialogs/nuxs/DraftsAnnouncement'
import {isSnoozed, snooze, unsnooze} from '#/components/dialogs/nuxs/snoozing'
import {type EnabledCheckProps} from '#/components/dialogs/nuxs/utils'
import {useAnalytics} from '#/analytics'
@@ -37,8 +37,8 @@ const queuedNuxs: {
enabled?: (props: EnabledCheckProps) => boolean
}[] = [
{
- id: Nux.LiveNowBetaDialog,
- enabled: isLiveNowBetaDialogEnabled,
+ id: Nux.DraftsAnnouncement,
+ enabled: isDraftsAnnouncementEnabled,
},
]
@@ -186,7 +186,7 @@ function Inner({
return (
{/*For example, activeNux === Nux.NeueTypography && */}
- {activeNux === Nux.LiveNowBetaDialog && }
+ {activeNux === Nux.DraftsAnnouncement && }
)
}
diff --git a/src/state/queries/nuxs/definitions.ts b/src/state/queries/nuxs/definitions.ts
index e23050c465..25f975db26 100644
--- a/src/state/queries/nuxs/definitions.ts
+++ b/src/state/queries/nuxs/definitions.ts
@@ -14,6 +14,7 @@ export enum Nux {
FindContactsDismissibleBanner = 'FindContactsDismissibleBanner',
LiveNowBetaDialog = 'LiveNowBetaDialog',
LiveNowBetaNudge = 'LiveNowBetaNudge',
+ DraftsAnnouncement = 'DraftsAnnouncement',
/*
* Blocking announcements. New IDs are required for each new announcement.
@@ -72,6 +73,10 @@ export type AppNux = BaseNux<
id: Nux.LiveNowBetaNudge
data: undefined
}
+ | {
+ id: Nux.DraftsAnnouncement
+ data: undefined
+ }
>
export const NuxSchemas: Record | undefined> = {
@@ -87,4 +92,5 @@ export const NuxSchemas: Record | undefined> = {
[Nux.FindContactsDismissibleBanner]: undefined,
[Nux.LiveNowBetaDialog]: undefined,
[Nux.LiveNowBetaNudge]: undefined,
+ [Nux.DraftsAnnouncement]: undefined,
}