{"id":18207506,"url":"https://github.com/satyndr/threads","last_synced_at":"2026-04-05T23:34:04.960Z","repository":{"id":260765198,"uuid":"882252070","full_name":"Satyndr/threads","owner":"Satyndr","description":"Threads clone using React Native","archived":false,"fork":false,"pushed_at":"2024-11-02T12:12:48.000Z","size":1564,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T19:52:38.213Z","etag":null,"topics":["backend","clerk","convex","fronend","mobile-app","react-native","sentry"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Satyndr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-02T10:07:15.000Z","updated_at":"2024-11-02T12:15:56.000Z","dependencies_parsed_at":"2024-11-02T13:17:06.493Z","dependency_job_id":"16e38ab0-9526-4439-bd96-2be277b5a9ff","html_url":"https://github.com/Satyndr/threads","commit_stats":null,"previous_names":["satyndr/threads"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Satyndr%2Fthreads","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Satyndr%2Fthreads/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Satyndr%2Fthreads/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Satyndr%2Fthreads/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Satyndr","download_url":"https://codeload.github.com/Satyndr/threads/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247721928,"owners_count":20985083,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","clerk","convex","fronend","mobile-app","react-native","sentry"],"created_at":"2024-11-03T13:03:17.272Z","updated_at":"2025-12-30T23:06:01.676Z","avatar_url":"https://github.com/Satyndr.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# React Native Threads Clone with Clerk, Convex \u0026 Sentry\n\nThis is a React Native Threads clone using [Clerk](https://go.clerk.com/WKHSBp0) for user authentication and [Convex](https://convex.dev) for all backend logic.\n\nFor improved debuggability, we've added [Sentry](https://sentry.io) to the project.\n\nAdditional features:\n\n- [Expo Router](https://docs.expo.dev/routing/introduction/) file-based navigation\n- [Convex Database](https://docs.convex.dev/database) for data storage\n- [Convex File Storage](https://docs.convex.dev/file-storage) for file storage\n- [Convex Actions](https://supabase.com/edge-functions) for push notifications\n- [Sentry](https://docs.sentry.io/platforms/react-native) for error tracking\n- [Haptics](https://docs.expo.dev/versions/latest/sdk/haptics/) for haptic feedback\n- [Reanimated](https://docs.swmansion.com/react-native-reanimated/) for powerful animations\n- [Image Zoom](https://github.com/likashefqet/react-native-image-zoom) for image zoom component\n\n## Setup\n\n### Environment Setup\n\nMake sure you have the [Expo CLI](https://docs.expo.dev/get-started/set-up-your-environment/) installed.\n\nBecause we are using pre-built and a custom development client, you should download [Android Studio](https://developer.android.com/studio) and [Xcode](https://developer.apple.com/xcode/) to your Mac. For more information on setting up your development environment, refer to the [Expo documentation](https://docs.expo.dev/workflow/android-studio-emulator/) for Android Studio and the [React Native documentation](https://reactnative.dev/docs/environment-setup?guide=native) for Xcode.\n\n### App Setup\n\nTo build the app, perform the following steps:\n\n1. Clone the repository\n2. Run `npm install`\n3. Run `npx expo prebuild`\n4. Run `npx expo run:ios` or `npx expo run:android`\n\nAdd the access key to the Convex environment variables:\n\n```sh\nnpx convex env set EXPO_ACCESS_TOKEN your-api-key\n\n```\n\n## Clerk Setup\n\n### Authentication Setup\n\nCreate a [Clerk](https://clerk.com/) account and project, then update the `convex/auth.config.js` file with your `domain` and `applicationID`.\n\n```js\nexport default {\n  providers: [\n    {\n      domain: \"https://your-clerk-domain.clerk.accounts.dev\",\n      applicationID: \"your-clerk-application-id\",\n    },\n  ],\n};\n```\n\nYou also need to connect Convex and Clerk with a JWT template. For this, cehck out the video and [Convex docs](https://docs.convex.dev/auth/clerk).\n\n### Webhook Setup\n\nYou need to set up a webhook in Clerk to handle the user creation and update events.\n\n1. Go to [Clerk](https://clerk.com) and select your project\n2. Go to **API** and select **Webhooks**\n3. Add the following webhook, which should point to your Convex instance and include the `user.created` and `user.deleted` events:\n\n## Sentry Setup\n\n1. Create a [Sentry](https://sentry.io) account and project\n2. Go to **Project Settings** and select **Client Keys**\n3. Copy the DSN and add it to the `.env` file\n\n## App Screenshots\n\n\u003cdiv style=\"display: flex; flex-direction: 'row';\"\u003e\n\u003cimg src=\"./screenshots/1.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/2.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/3.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/4.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/5.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/6.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/7.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/8.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/9.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/10.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/11.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/12.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/13.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/14.jpg\" width=30%\u003e\n\u003cimg src=\"./screenshots/15.jpg\" width=30%\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsatyndr%2Fthreads","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsatyndr%2Fthreads","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsatyndr%2Fthreads/lists"}