Skip to content

hp77-creator/linkstack

Repository files navigation

LinkStack

LinkStack Icon

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.

Project Status

  • 🚀 Active Development
  • 📱 Android 12+ Support
  • 🎨 Material Design 3 Implementation
  • 🔒 Security Updates
  • ♿ Accessibility Improvements

Design & User Experience

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

Performance & Security

Performance Optimizations

  • Efficient database queries with Room
  • Background processing with WorkManager
  • Memory management with Kotlin Flows
  • Image loading optimization
  • View recycling in lists

Security Features

  • Encrypted data storage
  • Secure GitHub authentication
  • API key protection
  • Safe network operations
  • Input validation and sanitization

Features

  • 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

Screens

  • 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

Link Types

The app supports various link types with specialized handling:

  • Articles
  • Videos
  • Social Media Posts
  • Documentation
  • GitHub Repositories
  • General Links

Reminder System

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

Testing

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

Architecture

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

Development Practices

  • 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

Database Schema

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

HackerNews Integration

The app integrates with HackerNews API to:

  • Share links to HackerNews community
  • View HackerNews discussions
  • Track share status and engagement
  • Handle HackerNews authentication

Tech Stack

  • 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

Getting Started

Prerequisites

  • Android Studio Arctic Fox or later
  • JDK 11 or later
  • Android SDK 21 or later

Setup

  1. Clone the repository:
git clone https://github.com/yourusername/Linkstack.git
  1. Open the project in Android Studio

  2. Add your GitHub API credentials in local.properties:

github.client_id=your_client_id
github.client_secret=your_client_secret
  1. Build and run the project

Building the App

Debug Build

# Generate debug APK
./gradlew assembleDebug

# The APK will be available at:
# app/build/outputs/apk/debug/app-debug.apk

Release Build

  1. Create a keystore file (if you don't have one):
keytool -genkey -v -keystore linkstash.keystore -alias linkstash -keyalg RSA -keysize 2048 -validity 10000
  1. Add keystore information in local.properties:
keystore.path=linkstash.keystore
keystore.password=your_keystore_password
keystore.alias=linkstash
keystore.alias_password=your_key_password
  1. Generate release APK:
# Generate signed release APK
./gradlew assembleRelease

# The APK will be available at:
# app/build/outputs/apk/release/app-release.apk

Android App Bundle

For Play Store distribution:

# Generate Android App Bundle (AAB)
./gradlew bundleRelease

# The AAB will be available at:
# app/build/outputs/bundle/release/app-release.aab

Build Variants

  • Debug: Development version with debugging enabled
  • Release: Optimized version with ProGuard rules applied
  • Both variants support different product flavors if configured

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

GitHub Sync

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

License

This project is licensed under the MIT License - see the LICENSE file for details

Learning Resources & Best Practices

Architecture & Design Patterns

Modern Android Development

Testing

Performance

Security

About

an app to store links for blogs, videos, job applications, sync them with github,

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages