diff --git a/assets/icons/unverifiedX.svg b/assets/icons/unverifiedX.svg
new file mode 100644
index 0000000000..57308783eb
--- /dev/null
+++ b/assets/icons/unverifiedX.svg
@@ -0,0 +1 @@
+
diff --git a/src/analytics/metrics/types.ts b/src/analytics/metrics/types.ts
index 1f6b25278b..23046f03a0 100644
--- a/src/analytics/metrics/types.ts
+++ b/src/analytics/metrics/types.ts
@@ -1043,4 +1043,6 @@ export type Events = {
'profile:associated:germ:click-self-info': {}
'profile:associated:germ:self-disconnect': {}
'profile:associated:germ:self-reconnect': {}
+
+ 'jerry:no': {}
}
diff --git a/src/components/ProfileBadges.tsx b/src/components/ProfileBadges.tsx
index dd0cedfe8f..e30068c9dc 100644
--- a/src/components/ProfileBadges.tsx
+++ b/src/components/ProfileBadges.tsx
@@ -7,6 +7,11 @@ import {useSimpleVerificationState} from '#/components/verification'
import {VerificationCheck} from '#/components/verification/VerificationCheck'
import {VerificationCheckButton} from '#/components/verification/VerificationCheckButton'
import type * as bsky from '#/types/bsky'
+import {
+ isJerrifiedAccount,
+ JerrifiedBadge,
+} from './verification/aprilFools/JerrifiedBadge'
+import {JerrifiedBadgeButton} from './verification/aprilFools/JerrifiedBadgeButton'
export type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
@@ -39,8 +44,11 @@ export function ProfileBadges({
const shadowed = useProfileShadow(profile)
const verification = useSimpleVerificationState({profile})
+ const isJerry = isJerrifiedAccount(profile)
+
// if nothing to show, don't render the container at all
- if (!verification.showBadge && !isBotAccount(shadowed)) return null
+ if (!verification.showBadge && !isBotAccount(shadowed) && !isJerry)
+ return null
const isOnTheSmallSide = size === 'xs' || size === 'sm'
@@ -54,6 +62,12 @@ export function ProfileBadges({
]}>
{interactive ? (
<>
+ {isJerry && (
+
+ )}
) : (
<>
+ {isJerry && }
{verification.showBadge && (
(
+ function LogoImpl(props, ref) {
+ const {fill, size, style, ...rest} = useCommonSVGProps(props)
+
+ return (
+
+ )
+ },
+)
diff --git a/src/components/verification/aprilFools/JerrifiedBadge.tsx b/src/components/verification/aprilFools/JerrifiedBadge.tsx
new file mode 100644
index 0000000000..080ad734fd
--- /dev/null
+++ b/src/components/verification/aprilFools/JerrifiedBadge.tsx
@@ -0,0 +1,12 @@
+import {UnverifiedX} from '#/components/icons/UnverifiedX'
+import type * as bsky from '#/types/bsky'
+
+const JERRY = 'did:plc:vc7f4oafdgxsihk4cry2xpze'
+
+export function isJerrifiedAccount(profile: bsky.profile.AnyProfileView) {
+ return profile.did === JERRY
+}
+
+export function JerrifiedBadge({width}: {width: number}) {
+ return
+}
diff --git a/src/components/verification/aprilFools/JerrifiedBadgeButton.tsx b/src/components/verification/aprilFools/JerrifiedBadgeButton.tsx
new file mode 100644
index 0000000000..fab987c6d1
--- /dev/null
+++ b/src/components/verification/aprilFools/JerrifiedBadgeButton.tsx
@@ -0,0 +1,107 @@
+import {View} from 'react-native'
+import {Trans, useLingui} from '@lingui/react/macro'
+
+import {UserAvatar} from '#/view/com/util/UserAvatar'
+import {atoms as a, web} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import * as Dialog from '#/components/Dialog'
+import {UnverifiedX} from '#/components/icons/UnverifiedX'
+import {Text} from '#/components/Typography'
+import {useAnalytics} from '#/analytics'
+import type * as bsky from '#/types/bsky'
+import {JerrifiedBadge} from './JerrifiedBadge'
+
+export function JerrifiedBadgeButton({
+ profile,
+ width,
+}: {
+ profile: bsky.profile.AnyProfileView
+ width: number
+}) {
+ const {t: l} = useLingui()
+ const ax = useAnalytics()
+ const control = Dialog.useDialogControl()
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+ Jerry is unverified
+
+
+ Do not trust this user under any circumstances.
+
+
+
+
+
+
+ >
+ )
+}