Giter VIP home page Giter VIP logo

graysky's Introduction

Graysky

Crowdin

Graysky is a Bluesky client written in React Native.

Get it here: https://graysky.app/download

Getting Started

You'll need pnpm, and some sort of simulator or device to run the app on.

pnpm install
cp .env.example .env

EAS setup (optional) Set EAS_PROJECT_ID, APP_ID, and OWNER in .env

In the /apps/expo directory, build the dev client using EAS:

pnpm build:dev-client:ios-simulator
// or
pnpm build:dev-client:android

You can then start the expo server with:

pnpm dev

Future Roadmap

  • Change handle
    • own domain
    • bsky.social
    • community handles
  • Push notifications
  • Drafts
  • Full lists support
  • Share post as image
  • Pro features
    • Polls
    • Analytics

Android local APK builds

  • Install Android Studio, and the Android SDK
  • Install Azul Zulu OpenJDK (brew install --cask zulu17) and then set JAVA_HOME to the path of the JDK, which will probably be /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home
  • Copy google-services.json.example to google-services.json, or add your own Firebase config
  • Make Gradle faster in ~/.gradle/gradle.properties:
org.gradle.jvmargs=-Xmx20g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=2g
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=false
org.gradle.caching=true

You can now either run pnpm build:android to build and submit the app, or if you want to sign a build manually you can do the following:

  • Create a signing key in Android Studio
  • Build it with: eas build --platform android --profile production-apk --non-interactive --local --output="./foo.apk" --wait
  • Sign it with: /Users/alice/Library/Android/sdk/build-tools/33.0.0/apksigner sign -ks sideload.jks foo.apk

iOS local builds

In the /apps/expo directory:

pnpm build:ios

Sponsors

Thank you to @thepriceisright for sponsoring my work on this project!

Contributors

Graysky is primarily developed by @mozzius.dev. If you'd like to show your support for the project, you can sponsor me.

However, I'm not the only one who's contributed to this project. I'd like to especially thank @alice.bsky.sh for her work on adding dark mode, and getting Android builds working, and thank @holden.bsky.social for their invaluable accessibility improvements.

All Contributors

My eternal thanks to the following people for their contributions to Graysky:

graysky's People

Contributors

aliceisjustplaying avatar gashon avatar haileyok avatar hs4man21 avatar intrnl avatar matthewstanciu avatar mozzius avatar reindex-ot avatar renovate[bot] avatar surfdude29 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

graysky's Issues

feat: some way to save/share images

Describe the feature you'd like to request

Need a way to save images to device

Describe the solution you'd like to see

Ideally long press the image

Additional information

No response

bug: Doubled posts in feed

Describe the bug

iPhone 14 Pro (iOS 16.6.1)
Graysky 0.1.5

I’m occasionally seeing posts get doubled in my skyline when viewing the Urbanism+ feed:

https://bsky.app/profile/did:plc:lptjvw6ut224kwrj7ub3sqbe/feed/aaaotfjzjplna

There does not seem to be a discernible pattern or attribute that results in a doubling; it happens on text-only posts, image posts, posts with link embeds, etc., but many other posts with those same attributes are NOT doubled.

Additionally, I have not seen this behavior on my Following feed or any other feed, and I have not seen it with the Urbanism+ feed on the official Bsky app.

To reproduce

  1. Save and favorite the Urbanism+ feed
  2. From the home screen, tap the My Feeds button
  3. Select the Urbanism+ feed from the list of favorite feeds
  4. Scroll through the list of posts in the feed

Additional information

Screenshots showing examples of doubled posts:

IMG_8051

IMG_8052

IMG_8139

IMG_8141

bug: app crashing on back gesture on android

Describe the bug

The app crashes when you've tapped into a thread and then use a gesture to go back. It doesn't happen every time but it happens often enough that I can reproduce it in under a minute. I hooked up logcat to my device to try and catch the problem and here's the relevant capture:

09-25 10:13:49.552 24937 24937 E InputEventReceiver: Exception dispatching input event.
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI: com.facebook.jni.CppException: Exception in HostFunction: Incompatible object passed to scheduleOnJS. It is only allowed to schedule functions defined on the React Native JS runtime this way.
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI: 
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI: Error: Exception in HostFunction: Incompatible object passed to scheduleOnJS. It is only allowed to schedule functions defined on the React Native JS runtime this way.
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:     at _scheduleOnJS (native)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:     at anonymous (JavaScript:1:192)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:     at anonymous (JavaScript:1:211)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:     at anonymous (JavaScript:1:628)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:     at handleAndFlushAnimationFrame (JavaScript:1:147)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.reanimated.nativeProxy.EventHandler.receiveEvent(Native Method)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.reanimated.nativeProxy.EventHandler.receiveEvent(EventHandler.java:25)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.react.RNGestureHandlerStateChangeEvent.dispatch(RNGestureHandlerStateChangeEvent.kt:42)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.reanimated.NodesManager.handleEvent(NodesManager.java:309)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.reanimated.NodesManager.onEventDispatch(NodesManager.java:285)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.facebook.react.uimanager.events.EventDispatcherImpl.dispatchEvent(EventDispatcherImpl.java:116)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.ReactContextExtensionsKt.dispatchEvent(ReactContextExtensions.kt:9)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.react.RNGestureHandlerModule.sendEventForDirectEvent(RNGestureHandlerModule.kt:638)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.react.RNGestureHandlerModule.sendEventForReanimated(RNGestureHandlerModule.kt:624)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.react.RNGestureHandlerModule.onStateChange(RNGestureHandlerModule.kt:576)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.react.RNGestureHandlerModule.access$onStateChange(RNGestureHandlerModule.kt:38)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.react.RNGestureHandlerModule$eventListener$1.onStateChange(RNGestureHandlerModule.kt:346)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.core.GestureHandler.dispatchStateChange(GestureHandler.kt:84)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.onHandlerStateChange(GestureHandlerOrchestrator.kt:157)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.core.GestureHandler.moveToState(GestureHandler.kt:551)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.core.GestureHandler.cancel(GestureHandler.kt:640)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.cancelAll(GestureHandlerOrchestrator.kt:246)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.core.GestureHandlerOrchestrator.onTouchEvent(GestureHandlerOrchestrator.kt:43)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.react.RNGestureHandlerRootHelper.dispatchTouchEvent(RNGestureHandlerRootHelper.kt:97)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.swmansion.gesturehandler.react.RNGestureHandlerRootView.dispatchTouchEvent(RNGestureHandlerRootView.kt:35)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3091)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3091)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3091)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3091)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3091)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3091)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:500)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1912)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.app.Activity.dispatchTouchEvent(Activity.java:4299)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:70)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:458)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.View.dispatchPointerEvent(View.java:15309)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6778)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6578)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6034)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6091)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6057)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6222)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6065)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6279)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6038)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6091)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6057)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6065)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6038)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:9206)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:9157)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:9126)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:9329)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:267)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.os.MessageQueue.nativePollOnce(Native Method)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.os.MessageQueue.next(MessageQueue.java:335)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.os.Looper.loopOnce(Looper.java:161)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.os.Looper.loop(Looper.java:288)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at android.app.ActivityThread.main(ActivityThread.java:7918)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at java.lang.reflect.Method.invoke(Native Method)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
09-25 10:13:49.552 24937 24937 E MessageQueue-JNI:      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

Which maybe points the finger at Reanimated but from working on my own Expo apps in the past, that might just be a red herring and the actual issue may be elsewhere, possibly in Expo Router?

To reproduce

Using a Pixel 6 Pro device, navigate to a feed and then tap into any thread, then attempt to go back by using a swipe gesture.

Additional information

Phone model is Pixel 6 Pro, Android version 13

feat: embeds in the post composer

Describe the feature you'd like to request

Need to detect links to posts in the composer, and add the relevant embed. Also need to get metadata from external URLs

Describe the solution you'd like to see

unsure if a proxy is needed to get the metadata from urls. Maybe not, since no CORS?

Additional information

No response

bug: Refreshed post context views after successfully deleting a post still display the deleted post

Describe the bug

Deleting a post from a view context focused on that post always results in a confusing stake view which still shows that post.

To reproduce

  1. Navigate to own post
  2. Delete the post
  3. Acknowledge post deletion confirmation modal
  4. Wait for bottom-of-thread spinner to disappear
  5. Post remains visible
  6. Deleting any subsequent threaded posts will not cause them to disappear either
  7. Attempting to delete the posts again yields same confirmation modals
  8. Navigating away (eg to profile from post meta UI) then returning via backwards context navigation persists the stale data view

Suggestion

Upon successful deletion, navigate back to previous context (and refresh view as normal)

Additional information

No response

feat: USERNAME.gsky.io handes

Describe the feature you'd like to request

It would be cool to have an option to change .bsky.social to .gsky.io — I'm not sure how technically to arrange verification of multiple users on a domain that they don't own. But must be doable.

This will be a way of claiming support to Graysky project. I got inspiration from rbind.io project that helps to change personal website addresses from . github.io to .rbind.io

I think the feature may be only available to financial supporters of Graysky, sort of a parteon perk. Would be fair.

Describe the solution you'd like to see

Would require a domain aquisition, e.g. gsky.io and figuring out the technicalities of verification on bluesky

Additional information

No response

App crash when selecting Primary Feed

Describe the bug

In iOS app, the app crashes when attempting to select the Primary Feed after setting Home Screen Layout to ‘A Specific Feed’

To reproduce

  1. Navigate to Settings > Home feed preferences
  2. Change ‘Home screen layout’ (first option) to a specific feed (option should show ‘Primary Feed’ and have a second option underneath to set the Primary Feed)
  3. Tap the Primary Feed option to select which feed, and the app crashes

Additional information

Issue discovered on iPhone 14 Plus running iOS 17.0.3

feat: support for multiple accounts

Describe the feature you'd like to request

I'd love to see support for multiply bluesky accounts. For example, I have one "personal" account along with a "work" account for my research group. It'd be nice to be able to manage both from within a single app.

Describe the solution you'd like to see

My preference would be:

  • Press on your profile picture (circle in the top left) to open up the preferences/setting menu
  • Add the following items to that menu:
    • An option to "Add an account"
    • If other accounts are available, an option to switch to another account whose credentials have been stored in the app

Additional information

The "default" bluesky app has a somewhat inconvenient and glitchy way of handling multiple accounts:

  • Open "settings/preferences" hamburger menu
  • Click "settings"
  • Slick desired account under a "signed in as" menu
  • Wait a beat for the app to "reload" or "refresh" and populate itself with the new account

It'd be nice to be able to more quickly and smoothly flip between multiple accounts (fewer presses + smoother behavior) in Graysky.

By the way, thanks for developing this excellent app-- it's fantastic and I'm excited about its future!!

feat: Add support for linking using skeeet.xyz

Describe the feature you'd like to request

Hey, I make @justin/skeeet.xyz which makes it easy to link to skeets that show opengraph tags in iMessage/Signal. It's currently not possible to link to a skeet using skeeet.xyz using Graysky.

Describe the solution you'd like to see

  1. Integrate a "Share Externally" option that shares links using the site

or

  1. Change / Update how you are sharing URLs so that the existing shortcuts show up in the list of possible sharing options (this is how it works with the official Bluesky app)

Additional information

Shortcut 1: https://www.icloud.com/shortcuts/67e784dc7843411eb02352d94151444d
Shortcut 2: https://www.icloud.com/shortcuts/e9ffec51460f4a0bb0f7e023d1323113

Both of these are linked on https://skeeet.xyz/

This is obviously a selfish request, but I use my service constantly (and make zero money off it).

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Warning

These dependencies are deprecated:

Datasource Name Replacement PR?
npm @types/mime Unavailable

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • chore(deps): update dependency @crowdin/cli to ^3.19.4
  • chore(deps): update dependency @types/webpack-env to ^1.18.5
  • chore(deps): update dependency autoprefixer to ^10.4.20
  • chore(deps): update dependency dotenv-cli to ^7.4.2
  • chore(deps): update dependency postcss to ^8.4.41
  • fix(deps): update dependency @gorhom/bottom-sheet to v4.6.4
  • fix(deps): update dependency @react-native-community/netinfo to v11.3.2
  • fix(deps): update dependency @types/eslint to ^8.56.11
  • fix(deps): update dependency @vercel/speed-insights to ^1.0.12
  • fix(deps): update dependency clsx to ^2.1.1
  • fix(deps): update dependency metro to ~0.80.10
  • fix(deps): update dependency mime to ^4.0.4
  • fix(deps): update dependency react-native-collapsible-tab-view to ^7.0.1
  • fix(deps): update dependency react-native-date-picker to ^5.0.4
  • fix(deps): update dependency react-native-pager-view to v6.3.4
  • fix(deps): update dependency react-native-uitextview to ^1.1.8
  • fix(deps): update dependency react-wrap-balancer to ^1.1.1
  • fix(deps): update dependency zustand to ^4.5.4
  • fix(deps): update formatjs monorepo (@formatjs/intl-locale, @formatjs/intl-pluralrules)
  • fix(deps): update turbo monorepo (eslint-config-turbo, turbo)
  • chore(deps): update babel monorepo (@babel/core, @babel/preset-env, @babel/runtime)
  • chore(deps): update dependency eslint to ^9.9.0
  • chore(deps): update dependency tsx to ^4.17.0
  • chore(deps): update expo monorepo (@expo/config-plugins, @expo/metro-config, expo, expo-application, expo-av, expo-build-properties, expo-constants, expo-dev-client, expo-device, expo-file-system, expo-image, expo-insights, expo-linking, expo-localization, expo-media-library, expo-notifications, expo-router, expo-splash-screen, expo-status-bar, expo-system-ui, expo-task-manager, expo-updates)
  • chore(deps): update linguijs monorepo to ^4.11.3 (@lingui/cli, @lingui/macro, @lingui/react)
  • chore(deps): update pnpm to v9.7.0
  • fix(deps): update dependency @atproto/api to ^0.13.1
  • fix(deps): update dependency @atproto/xrpc-server to ^0.6.1
  • fix(deps): update dependency @expo/react-native-action-sheet to ^4.1.0
  • fix(deps): update dependency @ianvs/prettier-plugin-sort-imports to ^4.3.1
  • fix(deps): update dependency @mattermost/react-native-paste-input to ^0.8.0
  • fix(deps): update dependency @sentry/react-native to v5.28.0
  • fix(deps): update dependency @shopify/flash-list to v1.7.1
  • fix(deps): update dependency @vercel/analytics to ^1.3.1
  • fix(deps): update dependency esbuild to ^0.23.0
  • fix(deps): update dependency eslint-plugin-jsx-a11y to ^6.9.0
  • fix(deps): update dependency eslint-plugin-react to ^7.35.0
  • fix(deps): update dependency expo-server-sdk to ^3.10.0
  • fix(deps): update dependency immer to ^10.1.1
  • fix(deps): update dependency lucide-react to ^0.427.0
  • fix(deps): update dependency prettier to ^3.3.3
  • fix(deps): update dependency prettier-plugin-tailwindcss to ^0.6.6
  • fix(deps): update dependency react-native to v0.74.5
  • fix(deps): update dependency react-native-awesome-gallery to ^0.4.2
  • fix(deps): update dependency react-native-circular-progress to ^1.4.0
  • fix(deps): update dependency react-native-gesture-handler to ~2.18.1
  • fix(deps): update dependency react-native-image-crop-picker to ^0.41.2
  • fix(deps): update dependency react-native-ios-utilities to ^4.5.0
  • fix(deps): update dependency react-native-keyboard-controller to ^1.12.7
  • fix(deps): update dependency react-native-reanimated to ~3.15.0
  • fix(deps): update dependency react-native-safe-area-context to v4.10.8
  • fix(deps): update dependency react-native-screens to ~3.34.0
  • fix(deps): update dependency react-native-svg to v15.5.0
  • fix(deps): update dependency react-native-toastable to ^0.5.0
  • fix(deps): update dependency redis to ^4.7.0
  • fix(deps): update dependency tailwind-merge to ^2.5.2
  • fix(deps): update dependency zod to ^3.23.8
  • fix(deps): update nextjs monorepo to ^14.2.5 (@next/eslint-plugin-next, next)
  • fix(deps): update prisma monorepo to ^5.18.0 (@prisma/client, prisma)
  • chore(deps): update dependency @crowdin/cli to v4
  • chore(deps): update expo monorepo (major) (@expo/config-plugins, expo, expo-av, expo-blur, expo-clipboard, expo-constants, expo-dev-client, expo-device, expo-file-system, expo-haptics, expo-image-manipulator, expo-image-picker, expo-localization, expo-media-library, expo-navigation-bar, expo-screen-orientation, expo-sharing, expo-system-ui, expo-web-browser)
  • fix(deps): update dependency @formatjs/intl-locale to v4
  • fix(deps): update dependency @react-native-menu/menu to v1
  • fix(deps): update dependency @sentry/nextjs to v8
  • fix(deps): update dependency @types/eslint to v9
  • fix(deps): update dependency @vercel/kv to v2
  • fix(deps): update dependency eslint-config-turbo to v2
  • fix(deps): update dependency expo-quick-actions to v2
  • fix(deps): update dependency next-mdx-remote to v5
  • fix(deps): update dependency react-native-collapsible-tab-view to v8
  • fix(deps): update dependency react-native-purchases to v8
  • fix(deps): update dependency remark-custom-heading-id to v2
  • fix(deps): update typescript-eslint monorepo to v8 (major) (@typescript-eslint/eslint-plugin, @typescript-eslint/parser)
  • 🔐 Create all rate-limited PRs at once 🔐

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

dockerfile
Dockerfile
  • docker/dockerfile 1
  • node 18.19.0-slim
npm
apps/expo/package.json
  • @atproto/api ^0.12.2
  • @expo/metro-config ^0.17.6
  • @expo/react-native-action-sheet ^4.0.1
  • @formatjs/intl-getcanonicallocales ^2.3.0
  • @formatjs/intl-locale ^3.4.5
  • @formatjs/intl-pluralrules ^5.2.12
  • @gorhom/bottom-sheet 4.6.1
  • @lingui/react ^4.8.0
  • @mattermost/react-native-paste-input ^0.7.0
  • @react-native-community/netinfo 11.3.1
  • @react-native-community/progress-view ^1.4.2
  • @react-native-community/slider ^4.5.0
  • @react-native-menu/menu ^0.9.1
  • @react-navigation/elements ^1.3.30
  • @react-navigation/native ^6.1.17
  • @sentry/react-native 5.20.0
  • @shopify/flash-list 1.6.4
  • @tanstack/react-query ^5.29.0
  • bcp-47-match ^2.0.3
  • clsx ^2.1.0
  • dotenv ^16.4.5
  • expo 50.0.15
  • expo-application ~5.8.3
  • expo-av ^13.10.5
  • expo-blur ^12.9.2
  • expo-build-properties ~0.11.1
  • expo-clipboard ^5.0.1
  • expo-constants ~15.4.5
  • expo-dev-client ^3.3.11
  • expo-device ~5.9.3
  • expo-file-system ^16.0.8
  • expo-haptics ^12.8.1
  • expo-image ^1.10.6
  • expo-image-manipulator ^11.8.0
  • expo-image-picker ~14.7.1
  • expo-insights ~0.6.1
  • expo-linking ~6.2.2
  • expo-localization ~14.8.3
  • expo-media-library ^15.9.1
  • expo-navigation-bar ^2.8.1
  • expo-notifications ^0.27.6
  • expo-quick-actions ^1.0.1
  • expo-router 3.4.8
  • expo-screen-orientation ^6.4.1
  • expo-sharing ^11.10.0
  • expo-splash-screen ~0.26.4
  • expo-status-bar ~1.11.1
  • expo-system-ui ~2.9.3
  • expo-task-manager ^11.7.2
  • expo-updates ^0.24.12
  • expo-web-browser ~12.8.2
  • fast-text-encoding ^1.0.6
  • graphemer ^1.4.0
  • immer ^10.0.4
  • jwt-decode ^4.0.0
  • lucide-react-native ^0.366.0
  • metro ~0.80.8
  • mime ^4.0.1
  • nativewind ^2.0.11
  • prop-types ^15.8.1
  • react 18.2.0
  • react-dom 18.2.0
  • react-error-boundary ^4.0.13
  • react-native 0.73.6
  • react-native-avoid-softinput ^5.0.0
  • react-native-awesome-gallery ^0.3.8
  • react-native-circular-progress ^1.3.9
  • react-native-collapsible-tab-view ^7.0.0
  • react-native-date-picker ^5.0.0
  • react-native-draggable-flatlist ^4.0.1
  • react-native-drawer-layout 4.0.0-alpha.5
  • react-native-gesture-handler ~2.16.0
  • react-native-image-crop-picker ^0.40.3
  • react-native-ios-context-menu ^2.5.1
  • react-native-ios-utilities ^4.4.5
  • react-native-keyboard-controller ^1.11.6
  • react-native-mmkv ^2.12.2
  • react-native-pager-view 6.3.0
  • react-native-purchases ^7.26.0
  • react-native-reanimated ~3.8.1
  • react-native-safari-extension ^1.1.0
  • react-native-safe-area-context 4.9.0
  • react-native-screens ~3.30.1
  • react-native-svg 15.1.0
  • react-native-toastable ^0.4.2
  • react-native-uitextview ^1.1.6
  • react-native-url-polyfill ^2.0.0
  • react-native-view-shot ^3.8.0
  • rn-fetch-blob ^0.12.0
  • superjson 2.2.1
  • tailwind-merge ^2.2.2
  • zeego ^1.10.0
  • zod ^3.22.4
  • zustand ^4.5.2
  • @babel/core ^7.24.4
  • @babel/preset-env ^7.24.4
  • @babel/runtime ^7.24.4
  • @expo/config-plugins ^7.8.4
  • @lingui/cli ^4.8.0
  • @lingui/macro ^4.8.0
  • @types/babel__core ^7.20.5
  • @types/mime ^4.0.0
  • @types/react ^18.2.75
  • @types/webpack-env ^1.18.4
  • babel-plugin-macros ^3.1.0
  • eslint ^9.0.0
  • postcss ^8.4.38
  • prettier ^3.2.5
  • tailwindcss 3.3.2
  • typescript ^5.4.4
apps/nextjs/package.json
  • @atproto/api ^0.12.2
  • @atproto/identity ^0.4.0
  • @atproto/xrpc-server ^0.5.1
  • @sentry/nextjs ^7.109.0
  • @tanstack/react-query ^5.29.0
  • @vercel/analytics ^1.2.2
  • @vercel/kv ^1.0.1
  • @vercel/speed-insights ^1.0.10
  • bright ^0.8.5
  • gray-matter ^4.0.3
  • lucide-react ^0.383.0
  • next 14.1.4
  • next-mdx-remote ^4.4.1
  • react 18.2.0
  • react-dom 18.2.0
  • react-wrap-balancer ^1.1.0
  • rehype-autolink-headings ^7.1.0
  • rehype-slug ^6.0.0
  • remark-custom-heading-id ^1.0.1
  • remark-gfm ^3.0.1
  • sharp 0.32.6
  • superjson 2.2.1
  • zod ^3.22.4
  • @types/node ^20.12.6
  • @types/react ^18.2.75
  • @types/react-dom ^18.2.24
  • autoprefixer ^10.4.19
  • dotenv-cli ^7.4.1
  • eslint ^9.0.0
  • postcss ^8.4.38
  • prettier ^3.2.5
  • tailwindcss 3.3.2
  • typescript ^5.4.4
apps/push-notifs/package.json
  • @atproto/api ^0.12.2
  • atproto-firehose ^0.2.2
  • cron ^3.1.7
  • dotenv-cli ^7.4.1
  • esbuild ^0.20.2
  • expo-server-sdk ^3.9.0
  • redis ^4.6.13
  • @types/node ^20.12.6
  • eslint ^9.0.0
  • prettier ^3.2.5
  • tsx ^4.7.2
  • typescript ^5.4.4
package.json
  • @manypkg/cli ^0.21.4
  • eslint ^9.7.0
  • prettier ^3.3.3
  • turbo ^2.0.9
  • typescript ^5.5.3
  • @crowdin/cli ^3.19.2
  • node >=18.19.0
  • pnpm 9.6.0
  • sharp 0.32.6
  • use-deep-compare 2.0.0
packages/api/package.json
  • @atproto/api ^0.12.2
  • @atproto/identity ^0.4.0
  • @atproto/xrpc-server ^0.5.1
  • @vercel/analytics ^1.2.2
  • @vercel/kv ^1.0.1
  • encoding ^0.1.13
  • lande ^1.0.10
  • sharp 0.32.6
  • superjson 2.2.1
  • zod ^3.22.4
  • eslint ^9.0.0
  • prettier ^3.2.5
  • typescript ^5.4.4
packages/db/package.json
  • @prisma/client ^5.12.1
  • dotenv-cli ^7.4.1
  • eslint ^9.0.0
  • prettier ^3.2.5
  • prisma ^5.12.1
  • typescript ^5.4.4
tooling/eslint/package.json
  • @next/eslint-plugin-next ^14.1.4
  • @types/eslint ^8.56.7
  • @typescript-eslint/eslint-plugin ^7.6.0
  • @typescript-eslint/parser ^7.6.0
  • eslint-config-prettier ^9.1.0
  • eslint-config-turbo ^1.13.2
  • eslint-plugin-import ^2.29.1
  • eslint-plugin-jsx-a11y ^6.8.0
  • eslint-plugin-react ^7.34.1
  • eslint-plugin-react-hooks ^4.6.0
  • eslint ^9.0.0
  • typescript ^5.4.4
tooling/prettier/package.json
  • @ianvs/prettier-plugin-sort-imports ^4.2.1
  • prettier ^3.2.5
  • prettier-plugin-tailwindcss ^0.5.13
  • typescript ^5.4.4
tooling/tailwind/package.json
  • autoprefixer ^10.4.19
  • postcss ^8.4.38
  • tailwindcss 3.3.2
tooling/typescript/package.json
nvm
.nvmrc
  • node 18.19.0

  • Check this box to trigger a request for Renovate to run again on this repository

bug: links don't work in feed posts

Describe the bug

Pressing on a feed post always opens the thread, even if you're trying to press a mention or link

To reproduce

Try and press on a mention or link on the skyline

Additional information

@hs4man21 do you know if this might be related to some of the work you've been doing?

bug: Clicking a post that is a reply in a thread navigates to the first post in the thread

Describe the bug

I had expected when clicking a post to be taken to the post, but if the post is a reply to a thread I am taken to the top of the thread. This is unexpected, and, if a thread is very long, you're going to have to manually scroll to find the post you had selected.

I would prefer to go to the post.

To reproduce

Find a post that is a reply in a feed timeline, preferably one in a large thread
Click the post
Curse the heavens as the thread is opened at the beginning, rather than the post you selected.

Additional information

No response

bug: nonfunctional image picker shows the first time you select “limited access”

Describe the feature you'd like to request

I do not give any app full photo library access, out of principle and spite.

image

Currently Graysky behaves a bit weird - it asks for library access and fails if denied, but then still pops open the native picker.

For some reason, most apps want to implement their own image gallery, which means I first need to give the app permission to use the new photo and can then select that photo again in their custom picker.

Most apps also do a really bad job of implementing their own gallery, in my honest opinion. In addition to the privacy paranoia, I just prefer the UX of the native picker.

Describe the solution you'd like to see

Unless you have a real need, please don’t bother requesting direct gallery access and just use the native picker.

Additional information

No response

feat: Context menus on iOS

Describe the feature you'd like to request

Would be great to have context menus rather than action sheets for certain things

Describe the solution you'd like to see

Use react-native-ios-context-menu rather than action sheet for certain things like post actions

Additional information

Would enable cool long press stuff like how twitter does it

bug: Janky image issues

Describe the bug

iPhone 14 Pro (iOS 16.6.1)
Graysky 0.1.5

Sometimes images leap out of their bounding box and get stuck in the interface:

IMG_8068

IMG_8144

These images remain stuck in place, even when scrolling or loading different screens:

IMG_8060

IMG_8058

IMG_8061

To reproduce

  1. View posts on the home screen
  2. Tap an image to enlarge it
  3. Exit the image detail view

Additional information

Additional screenshots because I think they’re funny.

IMG_8145

IMG_8149

IMG_8151

Silly yellow and blue bar on android

Describe the bug

I guess it's a pop-up saying that you post a skeet or deleted one, but it's not that well implemented

To reproduce

Here are some clips

Screen_Recording_20231012_235117_Graysky.mp4
Screen_Recording_20231012_235341_Graysky.mp4

Additional information

Not related to this specific issue but Idk if posting gifs is out yet. I tried posting a gif (in the second video) and it's just an image

feat: Log Out

Describe the feature you'd like to request

I would like to be able to logout from app

Describe the solution you'd like to see

I couldn’t see logout button

Additional information

No response

feat: mute threads

Describe the feature you'd like to request

the ability to mute threads, like the official app

Describe the solution you'd like to see

See official app's implementation

Additional information

No response

feat: Add/support Graysky to share sheet on iOS

Describe the feature you'd like to request

Add/support Graysky to share sheet on iOS, there you can easily share content and open up a composer window with this content.
Links, Text, Images,…
IMG_5060

Describe the solution you'd like to see

Share content to Graysky composer

Additional information

No response

bug: No avatars on Samsung Galaxy S7

Describe the bug

All avatars on skeets and profiles are blank
image

To reproduce

Login in to app on Samsung Galaxy S7 and view feeds and profiles.

Additional information

No response

bug: app closes immediately upon back

Describe the bug

When in a feed, a single back click closes the app. I would expect getting back to the feed selection screen

To reproduce

☝️

Additional information

Android app 0.1.5

Cut a release for launch

Describe the feature you'd like to request

Hey, I'm using obtainium to install graysky, so it only updates whenever a release with an apk is uploaded to GitHub.

Describe the solution you'd like to see

Versions on Google play staying in sync with this releases on this repo.

Additional information

No response

feat: Feedback on successful post

Describe the feature you'd like to request

There isn’t any formal feedback for a successful sui-generis post from main; the ‘post’ button shows a spinner until resolution but upon resolution, there is no confirmation message, and unless the current view refreshing would incidentally reveal the post in context as an incidental secondary effect, it will not be visible.

Describe the solution you'd like to see

Navigate to the post view on success.

Additional information

No response

feat: remove account

Describe the feature you'd like to request

Currently you can not remove an existing account from the account list.

Describe the solution you'd like to see

Remove an existing account.

Additional information

No response

Line break inside initial splash screen

Describe the bug

Size of the text 'Graysky' seems not dynamically resizing depending on different screen sizes.
E.g. the letter 'y' breaks and falls into the next line (see screenshot).

To reproduce

1st possibility (before first usage)

  1. Download App
  2. Open App

2nd possibility (already in usage)

  1. Just logout

Additional information

Test-Environment

  • Device: iPhone XS
  • OS: iOS 17.0.3
  • Display/Screen: 2436 x 1125 Pixel

Screenshot

image

feat: Add notifications

Describe the bug

I cannot receive notifications on an iPhone 11 (iOS 14)

To reproduce

Posting something and waiting for a like :)

Additional information

No response

feat: have a feed open by default

Describe the feature you'd like to request

a default feed open when you hit the feeds tab.

Describe the solution you'd like to see

I tap feeds at the bottom of the screen then have to tap ‘following’ up at the top of the screen.
For me the main user experience is viewing my following feed (or whatever feed I’ve set as default)

Additional information

Maybe just requires a UX review of what is the best way to handle feeds. As it’s a social app they are the main part of it but they are now hidden behind a further tap in a different area of the screen.

bug: Too big feed title

Describe the bug

If I change the home screen from default to showing a particular feed (following), the title of the feed covers the first post on this particular feed

To reproduce

  1. go to settings --> home feed preferences
  2. change home screen layout to "a specific feed"
  3. set "following" as the primarily feed

Additional information

No response

bug: As of 0.1.5, search is no longer visible [Android alpha]

Describe the bug

There's no way to search anything currently. The tab is there, shows suggested follows, and is labeled Search at the top, but there's no search.

To reproduce

  1. Check the Search tab
  2. Observe

Additional information

On a Pixel 4a 5G, Android 13.
Screenshot_20230927-025800

Manually calculate estimate size of each post

Would massively improve FlashList accuracy, especially when scrolling up. Probably a necessity for non-jumpy reply viewing

<FlashList overrideItemLayout={({ item }) => estimateSize(item.post)} />

feat: Alt text on GIFs

Describe the feature you'd like to request

I acknowledge this could be due to lack of protocol support, but I'd like the ability to add alt text to GIFs.

Describe the solution you'd like to see

Pretty much the same as what happens for images, an alt text button/option for a GIF

Additional information

No response

feat: Fast account switch

Describe the feature you'd like to request

Currently you need 4 clicks to switch an account.

  • long click in the top left image
  • sign out
  • Log in
  • Choose account

Describe the solution you'd like to see

Directly choose the account after the click on the profile picture

Additional information

No response

feat: better alt text editor

In the new-composer branch, I’ve added the option to add alt text. However, I just open the native popup input thing which is not great UX

Task:

Better alt text editor where you can actually see the image. See twitter or the official bluesky app

feat: correctly align RTL text

Describe the feature you'd like to request

Detection of RTL posts

Describe the solution you'd like to see

Try to detect posts in right-to-left languages, (such as Hebrew, Arabic) and change the post’s direction accordingly

Additional information

Thanks for this amazing app!

feat: In @ tagging weight the list so people you follow appear at the top

Describe the feature you'd like to request

This was one big bug bear with the official client until a couple of releases ago, you'd type @ then start to type of filter and it would prioritise users on the bsky.social domain.

Describe the solution you'd like to see

When I @ the filtering as I type should bubble people I follow to the top of the list.

For example, instead of

@ moz showing me mozai.com as the first user, someone I don't follow, it ought to priotise @ mossius.dev because I follow you.

Official Client

20231021_172207000_iOS

Graysky

20231021_172226000_iOS

Additional information

No response

feat: Collapsible Feed Column in landscape mode

Describe the feature you'd like to request

In landscape mode, at least on my iPad, feeds are soo wide it feels like wasted space.

You might consider having the feed list on the left when in landscape, in addition to the floating button.

Note I am not a UI expert, this may, in fact, suck

Describe the solution you'd like to see

Your feed list on the left hand side when a device is in landscape / wide mode.

Additional information

No response

Feat: Use Social Media Keyboard on iOS

Describe the feature you'd like to request

On iOS there is the possibility use a „Social Media“ keyboard with dedicated @ und # buttons
IMG_5058

With those dedicated buttons you can type much faster instead of searching inside the the symbols of the second layer of the keyboard

Describe the solution you'd like to see

Keyboard with Social Media keys on iPad and iPhone, there should be a similar solution available on Android keyboards as I remember

Additional information

iOS, Android

feat: Add ability to subscrbe to lists

Describe the feature you'd like to request

I tried clicking on a link to a mutelist to check it out and Graysky got confused and send me to a 404 page.

Describe the solution you'd like to see

like how clicking on an avatar send you to the profile page, a link to a mutelist can send you to the page for the mutelist and you'll be able to sub to it like how you can follow user accounts.

Additional information

No response

feat: change fonts

Describe the feature you'd like to request

Vision issues, would like to be able to change font and fontsize

Describe the solution you'd like to see

A settings option for display font and size.
Ideally with a sample box that a user can adjust and see the changes in real time - "Adjust until you can read this text clearly".
This would change the default font used throughout the app and would help those with vision impairment.

Additional information

No response

feat: support for domains other than bsky.social

Describe the feature you'd like to request

I run a sandbox pds and i think itd be pretty nice to use graysky on it

Describe the solution you'd like to see

On the login screen there can be an advanced option for changing the server like how deck.blue does it

Additional information

No response

feat: Hold timeline at last read position when loading new messages

Describe the feature you'd like to request

When refreshing my Following feed (or any feed), new posts should load without losing my current place in the feed. That is, new posts are loaded above my current position, so I can read up from the last time I refreshed.

Describe the solution you'd like to see

After pulling to refresh, new posts are loaded above the current position in the timeline, with a number displayed as to how many new posts have been retrieved.

Additional information

No response

feat: hosting apks on github

Describe the feature you'd like to request

The beta test thing doesn't work on Aurora Store and other third party play store clients. Honestly it'd just be nice to be able to download the app without using Google

Describe the solution you'd like to see

apk builds and release tags on github would probably be the way to go

Additional information

My phone runs a degoogled rom and I don't currently have a computer capable of building android apps so I ended up having to sideload a googled rom in DSU and extract the apk from that to get the app on my phone. All the process did is remind me why i run degoogled. I probably will not be updating the app now unless aurora somehow manages to update it because it was painful enough just to get it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.