commits
Adds support for displaying Linkat board links on user profiles.
The Links tab appears when a user has configured a blue.linkat.board
record with link cards.
vs code did some weird auto formatting n that sketches me out
https://witchsky.app/profile/did:plc:irs2tcoeuvuwj3m4yampbuco
https://witchsky.app/profile/did:plc:irs2tcoeuvuwj3m4yampbuco
depending on the zoom of the page, the `@shi.gg` clips at the bottom
before: https://i.postimg.cc/nccKVK5k/Screenshot-From-2026-01-24-21-25-31.png
after: https://i.postimg.cc/dttRQRXj/Screenshot-From-2026-01-24-21-25-34.png
* Refresh on foreground
* Add back interval
should I add support for deer.social links? what about catsky.social? hmm so many possibilities (STILL NEEDS DEEP LINKING 💥)
* Fix caching, fix attributes setting
* Use useCallOnce hook
* Update dismissal handling
* Update copy
* Clean up flags
* Move getMetadataForLogger
* Nail down attributers
* Polyfill features cache
Drill down an `enabled` prop to ThreadItemAnchorFollowButtonInner so
that the GrowthHack wrapper is always rendered on iOS, even when the
follow button shouldn't be displayed. The inner component returns null
when disabled, allowing GrowthHack to render its logo without children.
Co-authored-by: Claude <noreply@anthropic.com>
* WIP
* Clean up growthbook code, integrate into init and sessions
* Move everything out of React
* Add metrics client
* Move to separate file
* Shared metadata cache
* Ensure we update metadata when session ID changes
* Ensure userMetadata is cleared when logging out
* WIP revamp
* Integrate feature gates into analytics context
* Clean up old code
* Fix useMeta util
* Some comments and cleanup
* Add logger to base analytics context
* Refactor current route handling
* Rip out LogEvent from navigation
* Update tracking endpoint
* Migrate toClout
* Clear out statsig client
* Add todo, reset logger readme
* Ope fix statsig noop
* Refactor logging in feed-feedback, add debug logging to metrics client
* Remove LogEvents alias for Metrics
* Prefer root package export
* Remove Metrics alias from logger
* [APP-1782] Migrate to new analytics APIs (#9735)
* Migrate logEvent to useAnalytics
* Migrate logger.metric to useAnalytics
* Migrate tricky spot, fix types
* Migrate remaining tricky spot
* Missed one
* Remove metric() from logger
* Migrate useGate to useAnalytics
* Remove all other StatSig mentions
* Update event payload
* Update logger tests
* Mock expo method
* Fix session ID bug
* Add session ID test
* Add test for metrics client
* Clarify intent
* Clean up core analytics file
* Clean up the call once utils
* Fix TODO
* Fix TODO
* Fix TODO
* Fix TODO
* Fix TODO
* Remove debug code
* Fix navigation context
* OK nav context is not working, todo
* Checkpoint: works but feels hacky
* Fix navigation context issue
* Improve feature API
* Improve metric logging
* Update logger tests
Bye bye "fix: ensure `com.atproto.*` calls go through without proxying" "add deer custom-appview" "unproxy preferences" (ALSO removes the pdsAgent import added in "couple code error fixes" 3814f6b)
This reverts commits 69cf6f93b829d1d25e5fa37875d90070f68ef2ed, 6b305f2626cffa73b1989dec44a071ae7b4ba2b9, and 45584b9c28a5b657e3684b2d8f3cbea06668c116.
Open profile is replaced with View avatar when you're on a profile of a live user. (Could probably remove the rest of the lightbox TouchableWithoutFeedback element here in favor of Bluesky's official implementation upstream and just above on line :205?)
where did it go? we will never know 🤷 this makes the background and mentions fixed ✅ yay! omg git is so wacky sometimes (or maybe major VS Code merging conflicts skill issue, unsure)


* Remove gates we don't need
* Clean up some logging
* Keep disable gates around for now
* Add missing gate
* Revert file
* Revert package changes
Fix loading screen background color to a lovely very dark orange instead of blue! Also fixed the ProfileMenu highlight being circular instead of square when active.
http://witchsky.app/profile/did:plc:q7suwaz53ztc4mbiqyygbn43/post/3mcnu54wgks2x
http://localhost:19006/profile/did:plc:q7suwaz53ztc4mbiqyygbn43/post/3mcnu54wgks2x
on top of https://tangled.org/jollywhoppers.com/witchsky.app/pulls/41
on top of https://tangled.org/jollywhoppers.com/witchsky.app/pulls/40
on top of https://tangled.org/jollywhoppers.com/witchsky.app/pulls/39
Co-authored-by: Claude <noreply@anthropic.com>
still need to replace the loading screen with witchsky's color instead of bluesky, but it's back to being fixed! I should've listened to lewis when he said to not remove this! I should've known!
WARNING. WITCHSKY DOES NOT WORK IN THIS STATE. YOU CAN NOT GET PAST THE AGE ASSURANCE SCREEN. BEWARE.
* Add platform vars to env
* Replace /platform/detection with /env
* Upgrade ESLint to v9 with flat config
- Upgrade eslint from v8 to v9.18.0
- Migrate from .eslintrc.js to eslint.config.mjs (flat config)
- Upgrade typescript-eslint to v8.20.0 (unified package)
- Replace eslint-plugin-import with eslint-plugin-import-x for flat config support
- Add globals package for environment globals
- Update eslint-plugin-bsky-internal with proper meta objects for ESLint v9
- Fix deprecated context.getScope() API usage
- Update bskyembed to use flat config
- Remove deprecated --ext flag from lint scripts
- Configure rules to maintain previous behavior while using new ESLint version
* Fix varsIgnorePattern to require character after underscore
Restore the original pattern `^_.+` instead of `^_` so that lingui's
`const { _ } = useLingui()` will still be flagged when unused.
* Update ESLint rule tests for flat config format
- Update RuleTester to use flat config languageOptions instead of
eslintrc parser format
- Remove duplicate test case that ESLint v9 now detects
- Add Jest globals for test files
* update eslint package versions
* lint android a11y
* enable typechecked rules, switch them to warn
* fix yarn lock ci
* Fix CI failure
* Remove unused globals?
* Organize a bit, add quiet to main lint command
* Allow ternary
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Eric Bailey <git@esb.lol>
`atproto-proxy` behavior seems ambiguous right now, it's not really clear whether PDS implementors should interpret atproto-proxy *before* or *after* PDS' own route handlers. This PR ensures that `com.atproto.*` calls go through without a proxy set (with some exception)
https://witchsky.app/profile/did:plc:irs2tcoeuvuwj3m4yampbuco
https://witchsky.app/profile/did:plc:irs2tcoeuvuwj3m4yampbuco
depending on the zoom of the page, the `@shi.gg` clips at the bottom
before: https://i.postimg.cc/nccKVK5k/Screenshot-From-2026-01-24-21-25-31.png
after: https://i.postimg.cc/dttRQRXj/Screenshot-From-2026-01-24-21-25-34.png
Drill down an `enabled` prop to ThreadItemAnchorFollowButtonInner so
that the GrowthHack wrapper is always rendered on iOS, even when the
follow button shouldn't be displayed. The inner component returns null
when disabled, allowing GrowthHack to render its logo without children.
Co-authored-by: Claude <noreply@anthropic.com>
* WIP
* Clean up growthbook code, integrate into init and sessions
* Move everything out of React
* Add metrics client
* Move to separate file
* Shared metadata cache
* Ensure we update metadata when session ID changes
* Ensure userMetadata is cleared when logging out
* WIP revamp
* Integrate feature gates into analytics context
* Clean up old code
* Fix useMeta util
* Some comments and cleanup
* Add logger to base analytics context
* Refactor current route handling
* Rip out LogEvent from navigation
* Update tracking endpoint
* Migrate toClout
* Clear out statsig client
* Add todo, reset logger readme
* Ope fix statsig noop
* Refactor logging in feed-feedback, add debug logging to metrics client
* Remove LogEvents alias for Metrics
* Prefer root package export
* Remove Metrics alias from logger
* [APP-1782] Migrate to new analytics APIs (#9735)
* Migrate logEvent to useAnalytics
* Migrate logger.metric to useAnalytics
* Migrate tricky spot, fix types
* Migrate remaining tricky spot
* Missed one
* Remove metric() from logger
* Migrate useGate to useAnalytics
* Remove all other StatSig mentions
* Update event payload
* Update logger tests
* Mock expo method
* Fix session ID bug
* Add session ID test
* Add test for metrics client
* Clarify intent
* Clean up core analytics file
* Clean up the call once utils
* Fix TODO
* Fix TODO
* Fix TODO
* Fix TODO
* Fix TODO
* Remove debug code
* Fix navigation context
* OK nav context is not working, todo
* Checkpoint: works but feels hacky
* Fix navigation context issue
* Improve feature API
* Improve metric logging
* Update logger tests
Bye bye "fix: ensure `com.atproto.*` calls go through without proxying" "add deer custom-appview" "unproxy preferences" (ALSO removes the pdsAgent import added in "couple code error fixes" 3814f6b)
This reverts commits 69cf6f93b829d1d25e5fa37875d90070f68ef2ed, 6b305f2626cffa73b1989dec44a071ae7b4ba2b9, and 45584b9c28a5b657e3684b2d8f3cbea06668c116.
* Upgrade ESLint to v9 with flat config
- Upgrade eslint from v8 to v9.18.0
- Migrate from .eslintrc.js to eslint.config.mjs (flat config)
- Upgrade typescript-eslint to v8.20.0 (unified package)
- Replace eslint-plugin-import with eslint-plugin-import-x for flat config support
- Add globals package for environment globals
- Update eslint-plugin-bsky-internal with proper meta objects for ESLint v9
- Fix deprecated context.getScope() API usage
- Update bskyembed to use flat config
- Remove deprecated --ext flag from lint scripts
- Configure rules to maintain previous behavior while using new ESLint version
* Fix varsIgnorePattern to require character after underscore
Restore the original pattern `^_.+` instead of `^_` so that lingui's
`const { _ } = useLingui()` will still be flagged when unused.
* Update ESLint rule tests for flat config format
- Update RuleTester to use flat config languageOptions instead of
eslintrc parser format
- Remove duplicate test case that ESLint v9 now detects
- Add Jest globals for test files
* update eslint package versions
* lint android a11y
* enable typechecked rules, switch them to warn
* fix yarn lock ci
* Fix CI failure
* Remove unused globals?
* Organize a bit, add quiet to main lint command
* Allow ternary
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Eric Bailey <git@esb.lol>