A Kotlin Multiplatform app that helps you manage your GitHub followers across Android, iOS, Desktop, and Web platforms.
- 🔐 GitHub OAuth 2.0 - Secure, modern web-based authentication flow
- 🌐 Web Target (Wasm) - Fully functional Web version using Compose for Web (WebAssembly)
- 🔒 AES-256 Encryption - Tokens encrypted with platform-native security (EncryptedSharedPreferences on Android, Keychain on iOS)
- 👥 Follower Analysis - See who follows you but you don't follow back
- 🔄 Following Analysis - See who you follow but they don't follow back
- ➕ Follow Users - Follow users directly from the app
- ➖ Unfollow Users - Unfollow users with a single tap
- 🔄 Real-time Updates - UI updates instantly after actions
- 📱 Cross-Platform - Shared UI and logic across Android, iOS, Desktop, and Web
- 🎨 Modern UI - Built with Compose Multiplatform 1.7.3 and Material 3
- 🛡️ Security First - No hardcoded secrets; dynamic configuration loading
- 🚀 Splash Screen - Native Android 12+ splash screen with custom icon
- 🔄 Pull-to-Refresh - Material 3 pull-to-refresh on user lists
- ⚙️ Settings Screen - Dedicated settings page with app version and logout
- 🧭 Type-Safe Navigation - Shared navigation logic across all targets
- 👤 User Profile Screen - View detailed profiles and toggle follow status
| Platform | Screenshot | Description |
|---|---|---|
| 🌐 Web | ![]() |
High-performance Wasm-based web dashboard |
| 📱 Mobile | ![]() |
Modern login screen with OAuth authentication |
![]() |
Three-tab dashboard showing follower comparisons |
- JDK 17 or higher
- Android Studio or IntelliJ IDEA
- GitHub OAuth App (Create one here)
- Homepage URL:
http://localhost:8080 - Callback URL:
http://localhost:8080
- Homepage URL:
./gradlew :androidApp:installDebug./gradlew :desktopApp:runThe Web version uses a built-in proxy to handle GitHub's CORS restrictions during development.
./gradlew :webApp:wasmJsBrowserDevelopmentRunAccess the app at http://localhost:8080.
The app follows Clean Architecture principles:
- Shared Module: Contains 100% of the UI (Compose) and Business Logic.
- Web module: Specific entry point for WebAssembly target.
- Data Layer: Ktor for networking, Ktor-Network-Coil for images.
- OAuth Provider: Decoupled interface for providing credentials at runtime without hardcoding.
For the Web version, secrets are loaded dynamically from the index.html to avoid including them in the compiled Wasm binary.
Update webApp/src/wasmJsMain/resources/index.html:
<script type="text/javascript">
window.clientId = "YOUR_CLIENT_ID";
window.clientSecret = "YOUR_CLIENT_SECRET";
</script>- 🌓 Dark/Light Theme Support - Dynamic theme switching
- 🌍 Multi-Language Support - Support for multiple locales
- 🌐 PWA Support - Make the Web version installable as a Progressive Web App
- 🎯 Custom Widgets - Android/iOS home screen widgets for follow stats
- 🗄️ Local Caching - Use SQLDelight for offline access to user lists
- 📬 Daily Notifications - Background check for new followers/unfollowers
- 🔍 Advanced Filtering - Search and filter users by account age, repository count, etc.
- 📂 Groupings - Tag users into custom groups (e.g., "Work", "Community")
- 📊 Insights Dashboard - Visual charts for follower growth over time
- 📥 Export Data - Export follower/following lists to CSV or JSON
- 📅 Scheduled Actions - Queue follow/unfollow tasks to respect GitHub rate limits
- 🚫 Block Management - Manage blocks directly from the app
- 🔄 Auto-Cleanup - Automatically suggest unfollowing inactive accounts
- 🛡️ Enhanced Security - Biometric lock (Fingerprint/FaceID) for mobile apps
- Getting Started Guide - Quick start for developers
- Implementation Summary - Technical details
- Security Documentation - Comprehensive security guide
MIT License


