LinkNest is an Android app for collecting, organizing, searching, and maintaining a personal library of websites.
It is built as a modular offline-first project with Jetpack Compose, Room, DataStore, Hilt, WorkManager, and AppSearch. The app focuses on fast local organization, metadata-aware capture, health monitoring, and lightweight maintenance workflows for saved links.
- Save websites into categories with icon support, notes, labels, pinning, and priority/follow-up state.
- Organize links with drag-and-drop style reordering, category moves, archive/delete flows, and smart dashboard sections.
- Search locally across titles, domains, categories, tags, notes, flags, and saved searches.
- Reopen filtered slices of the library with Smart Collections, recent queries, and saved searches.
- Run link health checks and review broken, redirected, timed-out, blocked, or login-required entries.
- Export and import backups as JSON or encrypted
.lnenpayloads. - Track integrity metrics such as duplicate entries, unsorted links, cache size, and database size.
- Publish shortcuts and refresh app widgets for quick access.
- Accept shared content into the app through a dedicated share-entry flow.
- Launch directly to the dashboard while background health monitoring runs separately when enabled.
- Dashboard
- Add / Edit Website
- Search & Collections
- Settings
- Integrity Center
- Health Report
- Kotlin
- Jetpack Compose
- Navigation Compose
- Hilt
- Room
- DataStore
- WorkManager
- AndroidX AppSearch
- Coil
- Jsoup
- Android Studio with a valid Android SDK installation
- JDK 17
- Android
minSdk = 26 - Android
targetSdk = 36 - Android
compileSdk = 36
appAndroid application entry point, navigation, widgets, shortcuts, share flow, and app-level wiring.core/commonShared utilities and cross-cutting helpers.core/modelShared domain models.core/databaseRoom database, DAOs, entities, and migrations.core/datastorePersistent preferences storage.core/networkMetadata fetching and URL health monitoring.core/designsystemTheme, surfaces, gradients, and reusable Compose components.core/dataOffline-first repositories, storage helpers, backup logic, and use cases.core/actionHigher-level actions, pipelines, and workers.feature/dashboardLibrary overview, category organization, and quick actions.feature/addeditWebsite capture and editing flow.feature/searchOffline search, filters, smart collections, and saved searches.feature/settingsPreferences, backup/restore, integrity, and health tooling.
From the project root:
.\gradlew.bat :app:assembleDebugTo produce a release build:
.\gradlew.bat :app:assembleRelease- Open the project in Android Studio.
- Make sure
local.propertiespoints at your Android SDK. - Sync Gradle.
- Run the
appconfiguration on a device or emulator.
.\gradlew.bat test
.\gradlew.bat lintDebug
.\gradlew.bat :core:network:testDebugUnitTest
.\gradlew.bat :app:assembleDebug
.\gradlew.bat :app:assembleReleaseSee AGENTS.md for repository conventions and docs/architecture/current-state.md for current module, screen, and data flow. Audit and validation artifacts live under docs/audit and docs/testing.
If Gradle reports that configuration cache cannot be reused, that is usually informational and not a failure.
If a Windows build fails with a locked dex file such as classes.dex, stop Gradle daemons and rerun:
.\gradlew.bat --stop
.\gradlew.bat :app:assembleRelease --console=plainIf Android Gradle Plugin complains about the Android user directory in a restricted environment, ensure a writable Android home is available before building.
linknest_logo.svgprototype 1.pngPrototype 2.png