LinkStack is a modern Android application for efficiently managing and organizing your links. Built with Clean Architecture and modern Android development practices, it offers a robust solution for saving, categorizing, and accessing your important links.
- 🚀 Active Development
- 📱 Android 12+ Support
- 🎨 Material Design 3 Implementation
- 🔒 Security Updates
- ♿ Accessibility Improvements
The app follows Material Design 3 principles with focus on:
- Dynamic Color Theming
- Adaptive Layouts
- Consistent Typography
- Motion and Animation
- Accessibility Features
- TalkBack Support
- Content Descriptions
- High Contrast Themes
- Customizable Text Size
- Efficient database queries with Room
- Background processing with WorkManager
- Memory management with Kotlin Flows
- Image loading optimization
- View recycling in lists
- Encrypted data storage
- Secure GitHub authentication
- API key protection
- Safe network operations
- Input validation and sanitization
- Link Management: Save and organize links with custom tags
- Smart Search: Quickly find links using advanced search capabilities
- GitHub Sync: Backup and sync your links with GitHub
- HackerNews Integration: Share and interact with HackerNews community
- Reminder System: Set reminders for saved links
- Theme Customization: Personalize your app experience
- Offline Support: Access your links without internet connection
- Tag Organization: Categorize links with custom tags for better organization
- Home: Main screen displaying all saved links with filtering options
- Search: Advanced search functionality with tag-based and text-based search
- Add/Edit Link: Form to add new links or edit existing ones with tag management
- Settings: App configuration including theme preferences and GitHub sync settings
- WebView: Built-in browser for viewing saved links
The app supports various link types with specialized handling:
- Articles
- Videos
- Social Media Posts
- Documentation
- GitHub Repositories
- General Links
Linkstack includes a sophisticated reminder system that:
- Allows setting custom reminders for saved links
- Supports different reminder frequencies
- Uses WorkManager for reliable background processing
- Sends notifications to revisit important links
- Manages reminder states and history
The project includes comprehensive testing:
- Unit Tests: Testing business logic and repositories
- Integration Tests: Testing database and network operations
- UI Tests: Testing Compose UI components
- Mock Repositories: For testing in isolation
The app follows Clean Architecture principles with a clear separation of concerns:
com.hp77.Linkstack/
├── data/ # Data Layer
│ ├── local/ # Room Database
│ ├── remote/ # Network Services
│ ├── repository/ # Repository Implementations
│ ├── mapper/ # Data Mappers
│ └── preferences/ # DataStore Preferences
├── domain/ # Domain Layer
│ ├── model/ # Domain Models
│ ├── repository/ # Repository Interfaces
│ └── usecase/ # Business Logic
└── presentation/ # UI Layer
├── components/ # Reusable UI Components
├── home/ # Home Screen
├── search/ # Search Screen
├── settings/ # Settings Screen
└── webview/ # WebView Screen
- Clean Architecture: Strict separation of concerns with data, domain, and presentation layers
- SOLID Principles: Following SOLID principles for maintainable and scalable code
- Repository Pattern: Abstract data sources behind repository interfaces
- Use Cases: Single responsibility principle applied to business logic
- Dependency Injection: Using Hilt for clean dependency management
- State Management: Using sealed classes for UI states and events
- Error Handling: Comprehensive error handling with custom Logger utility
- Code Style: Following Kotlin coding conventions and best practices
The app uses Room database with the following main entities:
- LinkEntity: Stores link information (URL, title, type, etc.)
- TagEntity: Stores tag information
- LinkTagCrossRef: Many-to-many relationship between links and tags
- Migrations: Versioned database migrations for schema updates
The app integrates with HackerNews API to:
- Share links to HackerNews community
- View HackerNews discussions
- Track share status and engagement
- Handle HackerNews authentication
- UI: Jetpack Compose - Modern Android UI toolkit
- Architecture Pattern: MVVM + Clean Architecture
- Dependency Injection: Hilt - Simplified DI for Android
- Local Storage: Room - SQLite abstraction layer
- Networking: Retrofit - Type-safe HTTP client
- Asynchronous Programming: Kotlin Coroutines & Flow
- Preferences: DataStore - Data storage solution
- Android Studio Arctic Fox or later
- JDK 11 or later
- Android SDK 21 or later
- Clone the repository:
git clone https://github.com/yourusername/Linkstack.git-
Open the project in Android Studio
-
Add your GitHub API credentials in
local.properties:
github.client_id=your_client_id
github.client_secret=your_client_secret- Build and run the project
# Generate debug APK
./gradlew assembleDebug
# The APK will be available at:
# app/build/outputs/apk/debug/app-debug.apk- Create a keystore file (if you don't have one):
keytool -genkey -v -keystore linkstash.keystore -alias linkstash -keyalg RSA -keysize 2048 -validity 10000- Add keystore information in
local.properties:
keystore.path=linkstash.keystore
keystore.password=your_keystore_password
keystore.alias=linkstash
keystore.alias_password=your_key_password- Generate release APK:
# Generate signed release APK
./gradlew assembleRelease
# The APK will be available at:
# app/build/outputs/apk/release/app-release.apkFor Play Store distribution:
# Generate Android App Bundle (AAB)
./gradlew bundleRelease
# The AAB will be available at:
# app/build/outputs/bundle/release/app-release.aab- Debug: Development version with debugging enabled
- Release: Optimized version with ProGuard rules applied
- Both variants support different product flavors if configured
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Linkstack provides seamless GitHub integration:
- Backup links to a GitHub repository
- Sync across multiple devices
- Version control for your link collection
- Secure authentication using GitHub OAuth
- Automatic conflict resolution
This project is licensed under the MIT License - see the LICENSE file for details
- Clean Architecture - Understanding the architectural principles
- Guide to App Architecture - Android's official architecture guide
- Repository Pattern - Data layer abstraction
- Use Case Pattern - Business logic organization
- Jetpack Compose - Modern UI toolkit
- Material Design 3 - Design system
- Kotlin Flows - Reactive programming
- WorkManager - Background processing
- Room Database - Local persistence
- Android Testing - Comprehensive testing guide
- Testing Compose - UI testing
- Repository Testing - Data layer testing
- App Performance - Performance best practices
- Memory Management - Memory optimization
- Database Performance - Room optimization
- Security Best Practices - Android security
- OAuth Implementation - Authentication
- Encryption - Data security