An Android app that captures and preserves all your phone notifications, even after you dismiss them. Built for sideloading on OnePlus 15 (OxygenOS 16.0.2).
Download Notification Hub v1.0.2 (Release APK)
Install via ADB:
adb install notification-hub-release.apk- Captures every notification your phone receives in real-time
- Stores notifications locally for 7 days
- Organizes notifications by day (Today, Yesterday, older dates)
- Persists dismissed notifications so you can always go back and check
- Supports light and dark mode with a custom color theme
- Auto-cleans notifications older than 7 days
- Language: Kotlin
- UI: Jetpack Compose + Material Design 3
- Database: Room (SQLite)
- Architecture: ViewModel + Flow
- Min SDK: 29 (Android 10)
- Target SDK: 36 (Android 16)
The app uses Android's NotificationListenerService to capture all notifications as they arrive. Each notification is saved to a local Room database with the app name, title, text, and timestamp. The UI reads from the database using Kotlin Flows, so the list updates in real-time. A cleanup task removes entries older than 7 days.
- Android Studio (latest stable)
- JDK 17+
- Android SDK 35
# Clone the repo
git clone <repo-url>
cd notification-hub
# Open in Android Studio and sync Gradle
# Or build from command line:
./gradlew assembleDebug
# Install on connected device
adb install app/build/outputs/apk/debug/app-debug.apk- Open Notification Hub on your phone
- Tap "Open Settings" to grant notification access
- Find "Notification Hub" in the list and enable it
- Return to the app - notifications will start appearing as they arrive
app/src/main/java/com/notificationhub/
├── NotificationHubApp.kt # Application class (database init)
├── MainActivity.kt # Entry point, permission check
├── data/
│ ├── NotificationEntity.kt # Room entity (DB schema)
│ ├── NotificationDao.kt # Database queries
│ └── NotificationDatabase.kt # Room database singleton
├── service/
│ └── NotificationCaptureService.kt # NotificationListenerService
├── ui/
│ ├── theme/
│ │ ├── Color.kt # Brand color palette
│ │ ├── Theme.kt # Light/dark theme config
│ │ └── Type.kt # Typography
│ ├── screens/
│ │ └── NotificationListScreen.kt # Main screen
│ └── components/
│ └── NotificationCard.kt # Individual notification card
└── viewmodel/
└── NotificationViewModel.kt # Data layer for UI
| Color | Hex | Usage |
|---|---|---|
| Punch Red | #E63946 |
Accents, errors, tertiary |
| Honeydew | #F1FAEE |
Light background |
| Frosted Blue | #A8DADC |
Secondary, dark primary |
| Cerulean | #457B9D |
Light primary |
| Oxford Navy | #1D3557 |
Dark background, light text |
# Build debug APK
./gradlew assembleDebug
# Build release APK
./gradlew assembleRelease
# Run unit tests
./gradlew test
# Run instrumented tests
./gradlew connectedAndroidTest
# Lint check
./gradlew lintThis project includes a .claude/ folder with skills, agents, and settings for Claude Code.
Slash commands: /build-and-fix, /code-review, /security-scan, /performance-review, /dependency-audit, /test-scaffold, /doc-sync, /dev-docs, /init-repo, /update-practices
Agents: architect, reviewer, security, performance, build-error-resolver, code-architecture-reviewer, production-principles-enforcer, strategic-plan-architect
See instructions.md for full usage details.
MIT

