···1617- Funner name (still love you tho bsky!)
18- Nicer colors (kinda like gruvbox? not really)
19-- We call them skeets (at least for English users)
20-- Attempts to ignore `!no-unauthenticated` labels
21- Share links to bitchsky.app or bsky.app
22- Embed player works with [stream.place](https://stream.place/) links!
0023- No push notifications (may be added later)
24- Kept as up-to-date as possible (sporadically unstable as a result)
25···28These are all available as options in a sub-page of the app's settings.
2930- Toggle go.bsky.app link proxying for analytics
31-- Toggle to see skeets in quotes through blocks and detachments (broken 💔)
32- Toggle to trust your own preferred verifiers (and to operate as one yourself)
33-- Toggle to disable the default app labeler
3435#### Tweaks
36···41- Toggle to only show a single tab if only one feed is pinned
42- Toggle to prevent others from getting notified when you interact with their reskeets
43- Toggle similar account recommendations
04445#### Metrics
46···58- Toggle to show feed context for debugging
59- Toggle to hide the 'show latest' button
60- Toggle to make reply button open thread from feeds
61-- More may be available in developer mode
62 - (Accessible by holding the version in the About settings screen)
6364## Upcoming or wishful features
···82- [ ] Automatic PDS detection like other social-app forks (fallback/email addresses to use bitchsky.social)
83- [ ] Like of or repost of repost icons in notifications
84- [ ] Change followed accounts [on onboarding](https://github.com/blacksky-algorithms/blacksky.community/commit/e36ee43efb4999f070860d7f70122e45b28c1e2b)
85-- [ ] Change ChatEmptyPill strings for English locale
86-- [ ] Pronouns+ from forks like [deer.aylac.top](https://github.com/ayla6/deer-social-test)
87- [ ] Visual replies indicator like the [Firmament userstyle](https://bitchsky.app/profile/did:plc:jwhxcrf5uvl3vyw7nurecgt5/post/3m4rr3vzmak2a) (and likes?)
88- [ ] Additional translation service providers + setting (Deepl, Kagi)
89- [ ] Move Mutuals label to the follow button
90-- [ ] Change defaults (alt text nation, link non-bsky handles, autoplay OFF, hide similar account recommendations)
000091- [ ] Bitchsky PDS and .social site (list good songs containing 'bitch' in their titles)
9293-#### Bugs
94-95-- [ ] Fix app crash on tapping profile header (./src/view/com/util/UserBanner.tsx)
96-- [ ] Fix regression causing zooming in to break on image lightboxes
97-98### Even more wishful or far off
99100- [ ] Collapse labels past a customizable number (from the same labeler?) into a labeler clip "(+)"
101- [ ] Submit releases to the Google Play Store and iOS App Store
102-- [ ] Likes tab on profiles for other users
103-- [ ] Move from GitHub to Tangled?
104-- [ ] Experimental toggle between handle and DID in share links?
105-- [ ] New fun language/locale(s) like Minecraft
106- [ ] Move TOS and privacy policy to Jollywhoppers website?
0107- [ ] Rewrite ALF for M3 Expressive (with in-app color slider like red dwarf, for web?)
108109## Development Resources
···1617- Funner name (still love you tho bsky!)
18- Nicer colors (kinda like gruvbox? not really)
19+- Posts are called Skeets
020- Share links to bitchsky.app or bsky.app
21- Embed player works with [stream.place](https://stream.place/) links!
22+- Open skeets in PDSls and original pages from bridged posts
23+- Better defaults (alt text required 😉)
24- No push notifications (may be added later)
25- Kept as up-to-date as possible (sporadically unstable as a result)
26···29These are all available as options in a sub-page of the app's settings.
3031- Toggle go.bsky.app link proxying for analytics
32+- Toggle to see skeets in quotes through blocks and detachments
33- Toggle to trust your own preferred verifiers (and to operate as one yourself)
34+- Toggle to disable the default app labeler(s)
3536#### Tweaks
37···42- Toggle to only show a single tab if only one feed is pinned
43- Toggle to prevent others from getting notified when you interact with their reskeets
44- Toggle similar account recommendations
45+- Toggle to make all user avatars square (like labelers)
4647#### Metrics
48···60- Toggle to show feed context for debugging
61- Toggle to hide the 'show latest' button
62- Toggle to make reply button open thread from feeds
63+- More may be available in developer mode?
64 - (Accessible by holding the version in the About settings screen)
6566## Upcoming or wishful features
···84- [ ] Automatic PDS detection like other social-app forks (fallback/email addresses to use bitchsky.social)
85- [ ] Like of or repost of repost icons in notifications
86- [ ] Change followed accounts [on onboarding](https://github.com/blacksky-algorithms/blacksky.community/commit/e36ee43efb4999f070860d7f70122e45b28c1e2b)
87+- [ ] Join date & switch accounts from composer from a fork like [deer.aylac.top](https://github.com/ayla6/deer-social-test)
088- [ ] Visual replies indicator like the [Firmament userstyle](https://bitchsky.app/profile/did:plc:jwhxcrf5uvl3vyw7nurecgt5/post/3m4rr3vzmak2a) (and likes?)
89- [ ] Additional translation service providers + setting (Deepl, Kagi)
90- [ ] Move Mutuals label to the follow button
91+- [ ] Put DeerSettings into separate subpages
92+- [ ] After subpages for options, add [Outlinks page](https://bitchsky.app/profile/did:plc:q7suwaz53ztc4mbiqyygbn43/post/3m5zjhhshic2g) &
93+ - [ ] ShareMenuItems.tsx, ShareMenuItems.web.tsx
94+- [ ] For profile meatball button, Open profile in PDSls & Open bridged OG fedi account page
95+ - [ ] ProfileMenu.tsx
96- [ ] Bitchsky PDS and .social site (list good songs containing 'bitch' in their titles)
970000098### Even more wishful or far off
99100- [ ] Collapse labels past a customizable number (from the same labeler?) into a labeler clip "(+)"
101- [ ] Submit releases to the Google Play Store and iOS App Store
102+- [ ] Move from GitHub to Tangled (and Cloudflare Pages to wisp.place)?
103+- [ ] Toggle between handle and DID in share links
00104- [ ] Move TOS and privacy policy to Jollywhoppers website?
105+- [ ] Ignore `!no-unauthenticated` labels
106- [ ] Rewrite ALF for M3 Expressive (with in-app color slider like red dwarf, for web?)
107108## Development Resources
···221 style={web({maxWidth: 400})}>
222 <View style={[a.gap_sm]}>
223 <Text style={[a.font_semi_bold, a.text_xl, a.pb_sm]}>
224- <Trans>Who can interact with this post?</Trans>
225 </Text>
226 <Rules
227 post={post}
···270 ]}>
271 {settings.length === 0 ? (
272 <Trans>
273- This post has an unknown type of threadgate on it. Your app may be
274 out of date.
275 </Trans>
276 ) : settings[0].type === 'everybody' ? (
277- <Trans>Everybody can reply to this post.</Trans>
278 ) : settings[0].type === 'nobody' ? (
279- <Trans>Replies to this post are disabled.</Trans>
280 ) : (
281 <Trans>
282 Only{' '}
···298 a.flex_wrap,
299 t.atoms.text_contrast_medium,
300 ]}>
301- <Trans>No one but the author can quote this post.</Trans>
302 </Text>
303 )}
304 </>
···221 style={web({maxWidth: 400})}>
222 <View style={[a.gap_sm]}>
223 <Text style={[a.font_semi_bold, a.text_xl, a.pb_sm]}>
224+ <Trans>Who can interact with this skeet?</Trans>
225 </Text>
226 <Rules
227 post={post}
···270 ]}>
271 {settings.length === 0 ? (
272 <Trans>
273+ This skeet has an unknown type of threadgate on it. Your app may be
274 out of date.
275 </Trans>
276 ) : settings[0].type === 'everybody' ? (
277+ <Trans>Everybody can reply to this skeet.</Trans>
278 ) : settings[0].type === 'nobody' ? (
279+ <Trans>Replies to this skeet are disabled.</Trans>
280 ) : (
281 <Trans>
282 Only{' '}
···298 a.flex_wrap,
299 t.atoms.text_contrast_medium,
300 ]}>
301+ <Trans>No one but the author can quote this skeet.</Trans>
302 </Text>
303 )}
304 </>
···105 <View style={[a.gap_lg]}>
106 <View style={[a.gap_sm]}>
107 <Text style={[a.text_2xl, a.font_bold]}>
108- <Trans>Embed post</Trans>
109 </Text>
110 <Text
111 style={[a.text_md, t.atoms.text_contrast_medium, a.leading_normal]}>
112 <Trans>
113- Embed this post in your website. Simply copy the following snippet
114 and paste it into the HTML code of your website.
115 </Trans>
116 </Text>
···105 <View style={[a.gap_lg]}>
106 <View style={[a.gap_sm]}>
107 <Text style={[a.text_2xl, a.font_bold]}>
108+ <Trans>Embed skeet</Trans>
109 </Text>
110 <Text
111 style={[a.text_md, t.atoms.text_contrast_medium, a.leading_normal]}>
112 <Trans>
113+ Embed this skeet in your website. Simply copy the following snippet
114 and paste it into the HTML code of your website.
115 </Trans>
116 </Text>
+4-4
src/components/dialogs/MutedWords.tsx
···118 </Text>
119 <Text style={[a.pb_lg, a.leading_snug, t.atoms.text_contrast_medium]}>
120 <Trans>
121- Posts can be muted based on their text, their tags, or both. We
122- recommend avoiding common words that appear in many posts, since it
123- can result in no posts being shown.
124 </Trans>
125 </Text>
126···260261 <View style={[a.flex_row, a.align_center, a.gap_sm, a.flex_wrap]}>
262 <Toggle.Item
263- label={_(msg`Mute this word in post text and tags`)}
264 name="content"
265 style={[a.flex_1]}>
266 <TargetToggle>
···118 </Text>
119 <Text style={[a.pb_lg, a.leading_snug, t.atoms.text_contrast_medium]}>
120 <Trans>
121+ Skeets can be muted based on their text, their tags, or both. We
122+ recommend avoiding common words that appear in many skeets, since it
123+ can result in no skeets being shown.
124 </Trans>
125 </Text>
126···260261 <View style={[a.flex_row, a.align_center, a.gap_sm, a.flex_wrap]}>
262 <Toggle.Item
263+ label={_(msg`Mute this word in skeet text and tags`)}
264 name="content"
265 style={[a.flex_1]}>
266 <TargetToggle>
···106 description = _(msg`You have muted this account.`)
107 }
108 } else if (modcause.type === 'mute-word') {
109- name = _(msg`Post Hidden by Muted Word`)
110- description = _(msg`You've chosen to hide a word or tag within this post.`)
111 } else if (modcause.type === 'hidden') {
112- name = _(msg`Post Hidden by You`)
113- description = _(msg`You have hidden this post.`)
114 } else if (modcause.type === 'reply-hidden') {
115 const isYou = currentAccount?.did === modcause.source.did
116 name = isYou
···106 description = _(msg`You have muted this account.`)
107 }
108 } else if (modcause.type === 'mute-word') {
109+ name = _(msg`Skeet Hidden by Muted Word`)
110+ description = _(msg`You've chosen to hide a word or tag within this skeet.`)
111 } else if (modcause.type === 'hidden') {
112+ name = _(msg`Skeet Hidden by You`)
113+ description = _(msg`You have hidden this skeet.`)
114 } else if (modcause.type === 'reply-hidden') {
115 const isYou = currentAccount?.did === modcause.source.did
116 name = isYou
+2-2
src/components/moderation/ReportDialog/copy.ts
···16 }
17 case 'post': {
18 return {
19- title: _(msg`Report this post`),
20- subtitle: _(msg`Why should this post be reviewed?`),
21 }
22 }
23 case 'list': {
···16 }
17 case 'post': {
18 return {
19+ title: _(msg`Report this skeet`),
20+ subtitle: _(msg`Why should this skeet be reviewed?`),
21 }
22 }
23 case 'list': {
+1-1
src/lib/api/index.ts
···183 })
184 if (isNetworkError(e)) {
185 throw new Error(
186- t`Post failed to upload. Please check your Internet connection and try again.`,
187 )
188 } else {
189 throw e
···183 })
184 if (isNetworkError(e)) {
185 throw new Error(
186+ t`Skeet failed to upload. Please check your Internet connection and try again.`,
187 )
188 } else {
189 throw e
···104 if (cause.type === 'mute-word') {
105 return {
106 icon: EyeSlash,
107- name: _(msg`Post Hidden by Muted Word`),
108 description: _(
109- msg`You've chosen to hide a word or tag within this post.`,
110 ),
111 }
112 }
113 if (cause.type === 'hidden') {
114 return {
115 icon: EyeSlash,
116- name: _(msg`Post Hidden by You`),
117- description: _(msg`You have hidden this post`),
118 }
119 }
120 if (cause.type === 'reply-hidden') {
···104 if (cause.type === 'mute-word') {
105 return {
106 icon: EyeSlash,
107+ name: _(msg`Skeet Hidden by Muted Word`),
108 description: _(
109+ msg`You've chosen to hide a word or tag within this skeet.`,
110 ),
111 }
112 }
113 if (cause.type === 'hidden') {
114 return {
115 icon: EyeSlash,
116+ name: _(msg`Skeet Hidden by You`),
117+ description: _(msg`You have hidden this skeet.`),
118 }
119 }
120 if (cause.type === 'reply-hidden') {
+1-1
src/locale/locales/en/messages.po
···10519#: src/view/com/auth/SplashScreen.web.tsx:103
10520#: src/view/com/composer/Composer.tsx:855
10521msgid "What's up?"
10522-msgstr "Skeet yo shit! 🗣️"
1052310524#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:146
10525msgid "When you tap on a check, you’ll see which organizations have granted verification."
···10519#: src/view/com/auth/SplashScreen.web.tsx:103
10520#: src/view/com/composer/Composer.tsx:855
10521msgid "What's up?"
10522+msgstr ""
1052310524#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:146
10525msgid "When you tap on a check, you’ll see which organizations have granted verification."
···31 <Layout.Header.BackButton />
32 <Layout.Header.Content>
33 <Layout.Header.TitleText>
34- <Trans>Post Interaction Settings</Trans>
35 </Layout.Header.TitleText>
36 </Layout.Header.Content>
37 <Layout.Header.Slot />
···41 <Admonition type="tip">
42 <Trans>
43 The following settings will be used as your defaults when creating
44- new posts. You can edit these for a specific post from the
45 composer.
46 </Trans>
47 </Admonition>
···31 <Layout.Header.BackButton />
32 <Layout.Header.Content>
33 <Layout.Header.TitleText>
34+ <Trans>Skeet Interaction Settings</Trans>
35 </Layout.Header.TitleText>
36 </Layout.Header.Content>
37 <Layout.Header.Slot />
···41 <Admonition type="tip">
42 <Trans>
43 The following settings will be used as your defaults when creating
44+ new skeets. You can edit these for a specific skeet from the
45 composer.
46 </Trans>
47 </Admonition>
···109 control={subscribeMutePromptControl}
110 title={_(msg`Mute these accounts?`)}
111 description={_(
112- msg`Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.`,
113 )}
114 onConfirm={onSubscribeMute}
115 confirmButtonCta={_(msg`Mute list`)}
···109 control={subscribeMutePromptControl}
110 title={_(msg`Mute these accounts?`)}
111 description={_(
112+ msg`Muting is private. Muted accounts can interact with you, but you will not see their skeets or receive notifications from them.`,
113 )}
114 onConfirm={onSubscribeMute}
115 confirmButtonCta={_(msg`Mute list`)}
···989 return (
990 <LoadMoreRetryBtn
991 label={_(
992- msg`There was an issue fetching posts. Tap here to try again.`,
993 )}
994 onPress={fetchNextPageFeedPreviews}
995 />
···989 return (
990 <LoadMoreRetryBtn
991 label={_(
992+ msg`There was an issue fetching skeets. Tap here to try again.`,
993 )}
994 onPress={fetchNextPageFeedPreviews}
995 />
+2-2
src/screens/Search/Shell.tsx
···351 onSubmitEditing={onSubmit}
352 placeholder={
353 inputPlaceholder ??
354- _(msg`Search for posts, users, or feeds`)
355 }
356 hitSlop={{...HITSLOP_20, top: 0}}
357 />
···523 style={t.atoms.text_contrast_medium as StyleProp<ViewStyle>}
524 />
525 <Text style={[t.atoms.text_contrast_medium, a.text_md]}>
526- <Trans>Find posts, users, and feeds on Bluesky</Trans>
527 </Text>
528 </View>
529 </View>
···351 onSubmitEditing={onSubmit}
352 placeholder={
353 inputPlaceholder ??
354+ _(msg`Search for skeets, users, or feeds`)
355 }
356 hitSlop={{...HITSLOP_20, top: 0}}
357 />
···523 style={t.atoms.text_contrast_medium as StyleProp<ViewStyle>}
524 />
525 <Text style={[t.atoms.text_contrast_medium, a.text_md]}>
526+ <Trans>Find skeets, users, and feeds on Witchsky</Trans>
527 </Text>
528 </View>
529 </View>
···55 </SettingsList.ItemText>
56 <Toggle.Item
57 name="require_alt_text"
58- label={_(msg`Require alt text before posting`)}
59 value={requireAltTextEnabled ?? false}
60 onChange={value => setRequireAltTextEnabled(value)}
61 style={[a.w_full]}>
62 <Toggle.LabelText style={[a.flex_1]}>
63- <Trans>Require alt text before posting</Trans>
64 </Toggle.LabelText>
65 <Toggle.Platform />
66 </Toggle.Item>
···55 </SettingsList.ItemText>
56 <Toggle.Item
57 name="require_alt_text"
58+ label={_(msg`Require alt text before skeeting`)}
59 value={requireAltTextEnabled ?? false}
60 onChange={value => setRequireAltTextEnabled(value)}
61 style={[a.w_full]}>
62 <Toggle.LabelText style={[a.flex_1]}>
63+ <Trans>Require alt text before skeeting</Trans>
64 </Toggle.LabelText>
65 <Toggle.Platform />
66 </Toggle.Item>
+2-2
src/screens/Settings/ActivityPrivacySettings.tsx
···49 <ItemTextWithSubtitle
50 bold
51 titleText={
52- <Trans>Allow others to be notified of your posts</Trans>
53 }
54 subtitleText={
55 <Trans>
56 This feature allows users to receive notifications for your
57- new posts and replies. Who do you want to enable this for?
58 </Trans>
59 }
60 />
···49 <ItemTextWithSubtitle
50 bold
51 titleText={
52+ <Trans>Allow others to be notified of your skeets</Trans>
53 }
54 subtitleText={
55 <Trans>
56 This feature allows users to receive notifications for your
57+ new skeets and replies. Who do you want to enable this for?
58 </Trans>
59 }
60 />
···40 bold
41 titleText={<Trans>Likes</Trans>}
42 subtitleText={
43- <Trans>Get notifications when people like your posts.</Trans>
44 }
45 />
46 </SettingsList.Item>
···40 bold
41 titleText={<Trans>Likes</Trans>}
42 subtitleText={
43+ <Trans>Get notifications when people like your skeets.</Trans>
44 }
45 />
46 </SettingsList.Item>
···38 <SettingsList.ItemIcon icon={LikeRepostIcon} />
39 <ItemTextWithSubtitle
40 bold
41- titleText={<Trans>Likes of your reposts</Trans>}
42 subtitleText={
43 <Trans>
44- Get notifications when people like posts that you've reposted.
45 </Trans>
46 }
47 />
···38 <SettingsList.ItemIcon icon={LikeRepostIcon} />
39 <ItemTextWithSubtitle
40 bold
41+ titleText={<Trans>Likes of your reskeets</Trans>}
42 subtitleText={
43 <Trans>
44+ Get notifications when people like skeets that you've reskeeted.
45 </Trans>
46 }
47 />
···507 let err = cleanError(e.message)
508 if (err.includes('not locate record')) {
509 err = _(
510- msg`We're sorry! The post you are replying to has been deleted.`,
511 )
512 } else if (e instanceof EmbeddingDisabledError) {
513- err = _(msg`This post's author has disabled quote posts.`)
514 }
515 setError(err)
516 setIsPublishing(false)
···570 <Toast.Icon />
571 <Toast.Text>
572 {thread.posts.length > 1
573- ? _(msg`Your posts were sent`)
574 : replyTo
575 ? _(msg`Your reply was sent`)
576- : _(msg`Your post was sent`)}
577 </Toast.Text>
578 {postUri && (
579 <Toast.Action
580- label={_(msg`View post`)}
581 onPress={() => {
582 const {host: name, rkey} = new AtUri(postUri)
583 navigation.navigate('PostThread', {name, rkey})
584 }}>
585- <Trans context="Action to view the post the user just created">
586 View
587 </Trans>
588 </Toast.Action>
···851 const selectTextInputPlaceholder = isReply
852 ? isFirstPost
853 ? _(msg`Write your reply`)
854- : _(msg`Add another post`)
855- : _(msg`What's up?`)
856 const discardPromptControl = Prompt.usePromptControl()
857858 const dispatchPost = useCallback(
···964 {canRemovePost && isActive && (
965 <>
966 <Button
967- label={_(msg`Delete post`)}
968 size="small"
969 color="secondary"
970 variant="ghost"
···989 </Button>
990 <Prompt.Basic
991 control={discardPromptControl}
992- title={_(msg`Discard post?`)}
993- description={_(msg`Are you sure you'd like to discard this post?`)}
994 onConfirm={() => {
995 dispatch({
996 type: 'remove_post',
···1115 {isReply ? (
1116 <Trans context="action">Reply</Trans>
1117 ) : isThread ? (
1118- <Trans context="action">Post All</Trans>
1119 ) : (
1120- <Trans context="action">Post</Trans>
1121 )}
1122 </ButtonText>
1123 </Button>
···507 let err = cleanError(e.message)
508 if (err.includes('not locate record')) {
509 err = _(
510+ msg`We're sorry! The skeet you are replying to has been deleted.`,
511 )
512 } else if (e instanceof EmbeddingDisabledError) {
513+ err = _(msg`This skeet's author has disabled quote skeets.`)
514 }
515 setError(err)
516 setIsPublishing(false)
···570 <Toast.Icon />
571 <Toast.Text>
572 {thread.posts.length > 1
573+ ? _(msg`Your skeets were sent`)
574 : replyTo
575 ? _(msg`Your reply was sent`)
576+ : _(msg`Your skeet was sent`)}
577 </Toast.Text>
578 {postUri && (
579 <Toast.Action
580+ label={_(msg`View skeet`)}
581 onPress={() => {
582 const {host: name, rkey} = new AtUri(postUri)
583 navigation.navigate('PostThread', {name, rkey})
584 }}>
585+ <Trans context="Action to view the skeet the user just created">
586 View
587 </Trans>
588 </Toast.Action>
···851 const selectTextInputPlaceholder = isReply
852 ? isFirstPost
853 ? _(msg`Write your reply`)
854+ : _(msg`Add another skeet`)
855+ : _(msg`Anything but skeet`)
856 const discardPromptControl = Prompt.usePromptControl()
857858 const dispatchPost = useCallback(
···964 {canRemovePost && isActive && (
965 <>
966 <Button
967+ label={_(msg`Delete skeet`)}
968 size="small"
969 color="secondary"
970 variant="ghost"
···989 </Button>
990 <Prompt.Basic
991 control={discardPromptControl}
992+ title={_(msg`Discard skeet?`)}
993+ description={_(msg`Are you sure you'd like to discard this skeet?`)}
994 onConfirm={() => {
995 dispatch({
996 type: 'remove_post',
···1115 {isReply ? (
1116 <Trans context="action">Reply</Trans>
1117 ) : isThread ? (
1118+ <Trans context="action">Skeet All</Trans>
1119 ) : (
1120+ <Trans context="action">Skeet</Trans>
1121 )}
1122 </ButtonText>
1123 </Button>
+1-1
src/view/com/composer/labels/LabelsBtn.tsx
···109 <Text style={[t.atoms.text_contrast_medium, a.leading_snug]}>
110 <Trans>
111 Please add any content warning labels that are applicable for the
112- media you are posting.
113 </Trans>
114 </Text>
115 </View>
···109 <Text style={[t.atoms.text_contrast_medium, a.leading_snug]}>
110 <Trans>
111 Please add any content warning labels that are applicable for the
112+ media you are skeeting.
113 </Trans>
114 </Text>
115 </View>
···117 label={
118 <RNText>
119 <Trans>
120- The post you're replying to was marked as being written in{' '}
121 {suggestedLanguageName} by its author. Would you like to reply in{' '}
122 <Text style={[a.font_bold]}>{suggestedLanguageName}</Text>?
123 </Trans>
···117 label={
118 <RNText>
119 <Trans>
120+ The skeet you're replying to was marked as being written in{' '}
121 {suggestedLanguageName} by its author. Would you like to reply in{' '}
122 <Text style={[a.font_bold]}>{suggestedLanguageName}</Text>?
123 </Trans>
···87 isLoading={isLoadingUri || isLoadingRepostedBy}
88 isError={isError}
89 emptyType="results"
90- emptyTitle={_(msg`No reposts yet`)}
91 emptyMessage={_(
92- msg`Nobody has reposted this yet. Maybe you should be the first!`,
93 )}
94 errorMessage={cleanError(resolveError || error)}
95 sideBorders={false}
···87 isLoading={isLoadingUri || isLoadingRepostedBy}
88 isError={isError}
89 emptyType="results"
90+ emptyTitle={_(msg`No reskeets yet`)}
91 emptyMessage={_(
92+ msg`Nobody has reskeeted this yet. Maybe you should be the first!`,
93 )}
94 errorMessage={cleanError(resolveError || error)}
95 sideBorders={false}
+1-1
src/view/com/posts/DiscoverFallbackHeader.tsx
···27 <View style={{flex: 1}}>
28 <Text type="md" style={pal.text}>
29 <Trans>
30- We ran out of posts from your follows. Here's the latest from{' '}
31 <TextLink
32 type="md-medium"
33 href="/profile/bsky.app/feed/whats-hot"
···27 <View style={{flex: 1}}>
28 <Text type="md" style={pal.text}>
29 <Trans>
30+ We ran out of skeets from your follows. Here's the latest from{' '}
31 <TextLink
32 type="md-medium"
33 href="/profile/bsky.app/feed/whats-hot"
+1-1
src/view/com/posts/PostFeed.tsx
···795 return (
796 <LoadMoreRetryBtn
797 label={_(
798- msg`There was an issue fetching posts. Tap here to try again.`,
799 )}
800 onPress={onPressRetryLoadMore}
801 />
···795 return (
796 <LoadMoreRetryBtn
797 label={_(
798+ msg`There was an issue fetching skeets. Tap here to try again.`,
799 )}
800 onPress={onPressRetryLoadMore}
801 />
···200 ]}>
201 <Text style={[a.text_center, a.text_sm, t.atoms.text_contrast_high]}>
202 <Trans>
203- Muted accounts have their posts removed from your feed and from your
204 notifications. Mutes are completely private.
205 </Trans>
206 </Text>
···200 ]}>
201 <Text style={[a.text_center, a.text_sm, t.atoms.text_contrast_high]}>
202 <Trans>
203+ Muted accounts have their skeets removed from your feed and from your
204 notifications. Mutes are completely private.
205 </Trans>
206 </Text>