commits
[APP-1788] update design for stacked avatars
Use Tanstack Query isPending over isLoading
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* fix operator precedence mistake
* ensure gifs can't change the global mute state
Sets the "What to test" field in TestFlight to distinguish between
TestFlight and Production builds.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* debounce on leading edge, reduce to 2s
* flush debounce on leave screen
* simplify by using useMutation properly
* add context for translators 'No one' option
* update ActivityPrivacySettings to add context for translators
* update translation context for 'No one' option
* Fix text input not updating
* Fix autofocus
* make placeholder text fainter
* Await invalidation
* Image only drafts
* tweaks to gif presentation
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* ensure enough space for sign in buttons
* smallest possible adjustment
* smallest possible adjustment
* respect mute words for live event feed banners
* linting
* Add encouragement message to drafts list
Shows "So many thoughts, you should post one" at the bottom of the drafts list when user has more than 5 drafts.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Use Text component and center-align encouragement message
- Switch from ButtonText to Text component for better styling
- Add text-center alignment to the message
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* set presentation field in record
* refer to it as a gif in the composer
* video player gif presentation style
* tweak badge
* only do the "manual loop" when absolutely necessary
* mute gifs
* reuse gif controls component for tenor gifs
* update media previews in notifications
* edit comment
* remove outdated prop
* only treat *animated* gifs as videos
* fix export
* add recId to onboarding
* add recId to follow dialog
* add recId to profile header suggestions
* add recId to feed interstitials, fix animation on native
* fix claude feedback
* fix yarn.lock ci
* add layout animation to contenthider
* add layout animation to posthider
https://claude.ai/code/session_018ZjPcCUDPfTjQ5SGac3Zgs
Co-authored-by: Claude <noreply@anthropic.com>
* persist startup queries
* Use IDB for query storage (#9687)
* Add storage abstraction for persisted query data
Introduce a platform-specific storage abstraction layer for react-query
persistence:
- Native: Uses MMKV for high-performance synchronous storage
- Web: Uses IndexedDB via the `idb` library for efficient async storage
This replaces the previous AsyncStorage implementation with more performant
platform-native solutions. The abstraction maintains API compatibility with
@tanstack/query-async-storage-persister.
* Refactor storage abstraction to use factory pattern
Change createPersistedQueryStorage to a factory function that accepts a
storage ID, allowing multiple isolated storage instances:
- Native: Each instance gets its own MMKV store
- Web: Each instance gets its own IndexedDB database
Adopt the factory pattern in:
- react-query.tsx: Uses 'persisted_queries' storage
- ageAssurance/data.tsx: Uses 'age_assurance' storage
This provides better separation between different query client caches
and allows each to be managed independently.
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Refactor to use archival storage
(cherry picked from commit a773b40e41c96f821cd32260919ce1437c0fc3ab)
* Improve archive db types
(cherry picked from commit 80e4959ba2aa00c984c26aed2f7dfae1095720b0)
* rm idb
* clear on logout, bust on app version
* create abstraction for persisting queries, make gcTime infinite
* Rm abstraction
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Eric Bailey <git@esb.lol>
https://claude.ai/code/session_01LWKpUAY5WJL7UfeFJd9kVU
Co-authored-by: Claude <noreply@anthropic.com>
Use a separate translatable string for "Media stored on another device"
instead of interpolating a translated fragment into another string.
This allows translators to properly handle the complete sentence for
languages with different grammar structures.
https://claude.ai/code/session_01TJMLcXE9HHneEXMEBJqL4u
Co-authored-by: Claude <noreply@anthropic.com>
* Send deviceId and platform
* Add deviceId and deviceName to drafts, skip loading media for other devies
* WIP new preview
* show rich text in drafts list
(cherry picked from commit fb70d53d59b547816aa8d236ab475f6c5651bb72)
* New draft preview UI
* Tighten up spacing in draft list
* Add i18n comments
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>
* Add encouragement message to drafts list
Shows "So many thoughts, you should post one" at the bottom of the drafts list when user has more than 5 drafts.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Use Text component and center-align encouragement message
- Switch from ButtonText to Text component for better styling
- Add text-center alignment to the message
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* set presentation field in record
* refer to it as a gif in the composer
* video player gif presentation style
* tweak badge
* only do the "manual loop" when absolutely necessary
* mute gifs
* reuse gif controls component for tenor gifs
* update media previews in notifications
* edit comment
* remove outdated prop
* persist startup queries
* Use IDB for query storage (#9687)
* Add storage abstraction for persisted query data
Introduce a platform-specific storage abstraction layer for react-query
persistence:
- Native: Uses MMKV for high-performance synchronous storage
- Web: Uses IndexedDB via the `idb` library for efficient async storage
This replaces the previous AsyncStorage implementation with more performant
platform-native solutions. The abstraction maintains API compatibility with
@tanstack/query-async-storage-persister.
* Refactor storage abstraction to use factory pattern
Change createPersistedQueryStorage to a factory function that accepts a
storage ID, allowing multiple isolated storage instances:
- Native: Each instance gets its own MMKV store
- Web: Each instance gets its own IndexedDB database
Adopt the factory pattern in:
- react-query.tsx: Uses 'persisted_queries' storage
- ageAssurance/data.tsx: Uses 'age_assurance' storage
This provides better separation between different query client caches
and allows each to be managed independently.
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Refactor to use archival storage
(cherry picked from commit a773b40e41c96f821cd32260919ce1437c0fc3ab)
* Improve archive db types
(cherry picked from commit 80e4959ba2aa00c984c26aed2f7dfae1095720b0)
* rm idb
* clear on logout, bust on app version
* create abstraction for persisting queries, make gcTime infinite
* Rm abstraction
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Eric Bailey <git@esb.lol>
Use a separate translatable string for "Media stored on another device"
instead of interpolating a translated fragment into another string.
This allows translators to properly handle the complete sentence for
languages with different grammar structures.
https://claude.ai/code/session_01TJMLcXE9HHneEXMEBJqL4u
Co-authored-by: Claude <noreply@anthropic.com>
* Send deviceId and platform
* Add deviceId and deviceName to drafts, skip loading media for other devies
* WIP new preview
* show rich text in drafts list
(cherry picked from commit fb70d53d59b547816aa8d236ab475f6c5651bb72)
* New draft preview UI
* Tighten up spacing in draft list
* Add i18n comments
---------
Co-authored-by: Samuel Newman <mozzius@protonmail.com>