{"id":30809612,"url":"https://github.com/maiz27/follow-sync","last_synced_at":"2026-04-29T08:35:10.390Z","repository":{"id":306683162,"uuid":"1026737362","full_name":"Maiz27/follow-sync","owner":"Maiz27","description":"Your intelligent GitHub network manager. Gain clear insights into your followers and following, identify non-mutual connections, and efficiently organize your professional GitHub presence.","archived":false,"fork":false,"pushed_at":"2025-08-24T17:43:07.000Z","size":2758,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-24T21:58:14.514Z","etag":null,"topics":["github","github-follower-analyzer","graphql","nextjs","react-query"],"latest_commit_sha":null,"homepage":"https://follow-sync.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Maiz27.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2025-07-26T14:04:34.000Z","updated_at":"2025-08-24T17:43:10.000Z","dependencies_parsed_at":"2025-07-27T03:38:22.794Z","dependency_job_id":"e0418890-b53d-47af-ae6f-9457ba431f26","html_url":"https://github.com/Maiz27/follow-sync","commit_stats":null,"previous_names":["maiz27/follow-sync"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Maiz27/follow-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiz27%2Ffollow-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiz27%2Ffollow-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiz27%2Ffollow-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiz27%2Ffollow-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Maiz27","download_url":"https://codeload.github.com/Maiz27/follow-sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Maiz27%2Ffollow-sync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273858866,"owners_count":25180770,"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","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["github","github-follower-analyzer","graphql","nextjs","react-query"],"created_at":"2025-09-06T04:48:14.405Z","updated_at":"2026-04-29T08:35:10.385Z","avatar_url":"https://github.com/Maiz27.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Follow Sync: Your GitHub Network Manager\n\n![Follow Sync Preview](/public/imgs/preview.jpg)\n\n**Follow Sync** is a modern GitHub network manager designed for power users. It helps you discover non-mutual connections, identify \"ghost\" accounts, and analyze your network efficiently.\n\n## Features\n\n- **Comprehensive Network Analysis:** Get a clear picture of who you follow that doesn't follow you back, and vice-versa.\n- **Ghost Account Detection:** Identify \"ghost\" connections—accounts that have been deleted or suspended but still appear in your network lists. This provides a more accurate understanding of your active network, as these connections cannot be removed through the API.\n- **Single-Click Follow/Unfollow:** Manage your network directly from the Follow Sync interface with optimistic UI updates for a seamless experience.\n- **Adaptive Caching:** Utilizes your own GitHub Gists as a database, with an intelligent caching mechanism to respect GitHub's API rate limits while keeping your data fresh.\n- **Secure \u0026 Private:** All your network data is stored in a private Gist that you own. Follow Sync never stores your data on its servers.\n- **Bulk Actions:** Select multiple users and perform follow/unfollow operations on them sequentially with progress tracking.\n- **Customizable Settings:** Tailor your experience with settings for pagination, avatar display, and more.\n\n## Technology Stack\n\n- **Framework:** [Next.js](https://nextjs.org/) 15+ (App Router)\n- **Language:** [TypeScript](https://www.typescriptlang.org/)\n- **State Management:** [TanStack Query (React Query)](https://tanstack.com/query/latest) for server state and [Zustand](https://github.com/pmndrs/zustand) for client state.\n- **Authentication:** [NextAuth.js](https://next-auth.js.org/) with GitHub OAuth\n- **API:** [GitHub GraphQL API](https://docs.github.com/en/graphql)\n- **Styling:** [Tailwind CSS](https://tailwindcss.com/)\n- **Hosting:** [Vercel](https://vercel.com/)\n\n## Architecture Overview\n\nFollow Sync employs a **client-heavy, GitHub-as-Infrastructure** architecture. It leverages GitHub's own systems for authentication, data fetching, and even data persistence.\n\n1. **Authentication:** You authorize the Follow Sync GitHub OAuth App, granting it limited, user-scoped permissions.\n2. **Data Fetching:** The app calls the GitHub GraphQL API to fetch your follower and following lists.\n3. **Analysis \u0026 Caching:** The data is analyzed in the client to find non-mutuals. The results are then stored in a private GitHub Gist owned by you. This Gist acts as a cache for all subsequent loads.\n4. **UI:** The interface is built with React Server Components and loads instantly from the Gist cache, triggering background refreshes based on the age and size of your network data.\n\n## Project Status \u0026 Roadmap\n\nThis project is currently in active development.\n\n- [x] **Phase 1:** Authentication \u0026 App Shell\n- [x] **Phase 2:** Core Data Pipeline (GraphQL)\n- [x] **Phase 3:** Adaptive Gist Caching\n- [x] **Phase 4:** Ghost-Detection Pipeline\n- [x] **Phase 5:** Follow/Unfollow Operations\n- [x] **Phase 6:** UI/UX Polish \u0026 Onboarding\n- [x] **Phase 7:** Performance Improvements \u0026 Testing\n- [x] **Phase 8:** User Settings\n\n## Getting Started for Local Development\n\nTo run this project locally, you first need to create and configure a GitHub OAuth App.\n\n### 1. Create a GitHub OAuth App\n\n1. Go to **Settings** \u003e **Developer settings** \u003e **OAuth Apps** and click **New OAuth App**.\n2. Fill in the required application details:\n   - **Application name:** `Follow Sync (local)`\n   - **Homepage URL:** `http://localhost:3000`\n   - **Authorization callback URL:** `http://localhost:3000/api/auth/callback/github`\n3. Click **Register application**.\n4. On the next page, generate a **client secret** and copy it.\n\n### 2. Configure Environment Variables\n\nCreate a file named `.env.local` in the project root. You will need the **Client ID** and the **Client secret** from your GitHub App settings page.\n\n```bash\n# .env.local\n\n# Get these from your GitHub App page\nAUTH_GITHUB_ID=\"YOUR_CLIENT_ID\"\nAUTH_GITHUB_SECRET=\"YOUR_CLIENT_SECRET\"\n\n# A random string for signing tokens.\n# You can generate one with: openssl rand -hex 32\nAUTH_SECRET=\"YOUR_AUTH_SECRET\"\n\n# Personal Access Token (for graphql code generation)\nGITHUB_PAT=\"YOUR_GITHUB_PAT\"\n\n# Domain\nNEXT_PUBLIC_DOMAIN=\"follow-sync.vercel.app\"\n```\n\n### 3. Install Dependencies \u0026 Run\n\nOnce your `.env.local` file is configured, you can install the dependencies and start the development server.\n\n```bash\nyarn install\nyarn dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\nSee the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaiz27%2Ffollow-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaiz27%2Ffollow-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaiz27%2Ffollow-sync/lists"}