Skip to content

astraedus/nudge

Repository files navigation

Nudge — Break the scroll. Take back your time.

Release License: GPL-3.0 Platform: Android 8.0+ Zero Internet Permission

A privacy-first, open-source app blocker for Android.
Made by @Antimatter543. Always free.


Dashboard Delay to open Breathing exercise Block YouTube Shorts

Nudge Demo


Play Store Download: Play Store Here

Why

This app is the product of a disdain for subscription services for things that should be free, a disdain for all infinite scrolling short content and about 2 doses of ritalin built over a weekend.

There are two things I dislike:

  1. Spending money on apps that should and could easily be free

  2. Letting trillion dollar companies have unfettered access to my increasingly-fragmented attention so that I may become a better consumer for their products

So! I decided to build a free, open-source app-blocker over a weekend because why not?? It's hard to balance no-media (your friends??) vs allowing media (and thus, being assaulted by engineered mechanisms that exploit human psychology).

App blockers ask for Accessibility Service permissions. It can see everything on your screen. Everything.

Most app blockers are closed-source. Some have been acquired by data intelligence companies. Their privacy policies are... Interesting. These apps can be good! But it's also trusting a closed project with root-level visibility into your digital life. I don't like that. I also hate spending money on apps that should be free.

In another realm, billions of dollars have been spent engineering the perfect attention trap. Every scroll, notification, and autoplay video is designed to fragment your focus and keep you consuming. Instagram Reels, YouTube Shorts, TikTok are all retention machines built on decades of behavioral psychology research. I personally use this app because it puts intention at the forefront of your mind. It doesn't necessarily block an app, but instead can ask you to wait 15 seconds before it opens. That's it. And that is enough to completely break subconscious behaviours by forcing your conscious self to acknowledge it.

This is the perfect counteractment to my ADHD ass: Other app blockers, I would simply disable. This one? Disabling this means I cannot wait 15 seconds to use a feature/app. That hurts my ego. And so. I leave it there. And just say. Ah. I'll do something else. Perfect.

Nudge is open source, requests zero internet permissions, and keeps all your data on your device. You can read every line of code. Always. On principle.

Features

Core blocking

  • Delay-to-open -- Before opening a blocked app, you wait through a breathing exercise or countdown timer. Not a hard lock -- a moment of friction that breaks the autopilot habit loop. This is the feature no other open-source blocker has.
  • Hard blocking -- Completely block apps you don't want to access at all.
  • Daily time budgets -- Allow 30 minutes of Instagram per day, then block. You choose the limit.
  • App groups -- Create a "Social Media" group, configure once, apply to all.

In-app feature blocking

Block addictive feeds without blocking the whole app:

  • YouTube Shorts -- block the Shorts feed, keep everything else
  • Instagram Reels/Explore -- block the infinite scroll, keep DMs and posts
  • TikTok For You -- block the algorithm, keep the app

Uses Accessibility Service to detect in-app navigation to these screens.

Smart features

  • Schedule rules -- Block apps on specific days and times (e.g. block social media 9-5 on weekdays). Supports overnight schedules that span midnight.
  • Interaction counter -- Floating overlay showing reels/shorts scrolled per session. Escalating colors warn you as the count rises.
  • Auto-kick -- Automatically sends you home after N scrolls. Configurable threshold with cooldown.
  • Grayscale mode -- Force your screen to grayscale to make apps less appealing.
  • Motivational messages -- Rotating messages on overlay screens to reinforce your intent.
  • "Walked Away" tracking -- Every time you choose to leave instead of waiting, Nudge counts it.
  • Export/Import -- Back up your rules and share configurations.

Dashboard

2x2 stats at a glance: Screen Time, Active Rules, Blocked (times blocked today), Walked Away (times you chose to leave). Weekly charts, hourly heatmaps, and streak tracking.

Privacy

  • Zero internet permission -- Declared in the manifest. Verifiable. Not a promise -- a guarantee.
  • All data stored locally (Room DB + DataStore). Nothing leaves your device.
  • No analytics, no telemetry, no crash reporting, no third-party SDKs.
  • Open source under GPL-3.0. Read the privacy policy.

Zero tracking -- settings screen

Install

Download APK

Download the latest APK from Releases and sideload it.

Build from source

git clone https://github.com/astraedus/nudge.git
cd nudge
export ANDROID_HOME=$HOME/Android/Sdk  # or your SDK path
./gradlew assembleDebug
# APK at app/build/outputs/apk/debug/app-debug.apk
adb install -r app/build/outputs/apk/debug/app-debug.apk

Requires: JDK 17+, Android SDK with platform 34 and build-tools 34.

How the blocking works

AccessibilityService detects foreground app change
  -> BlockEngine evaluates rules for that app
  -> If in-app rules exist: InAppDetector inspects navigation state
     (checks resource IDs + tab selection to identify Shorts/Reels/Explore)
  -> Decision: ALLOW | HARD_BLOCK | DELAY | BREATHING
  -> If blocked: full-screen overlay appears
  -> User can wait through the timer, or go back home
  -> After delay/breathing completes: passthrough until user leaves the app

The delay/breathing modes are the core idea. They don't lock you out -- they insert a moment of intentional friction. Research shows this small pause is enough to break the automatic habit loop that drives most mindless phone usage.

Permissions

Nudge requires three permissions. Here's exactly what each does and why:

Permission Why What it sees
Accessibility Service Detects foreground app + in-app navigation (Shorts, Reels, Explore) Package name of the foreground app, plus UI element IDs and selection state for in-app feature detection. Does not read arbitrary text, keystrokes, or notification content. See privacy policy for details.
Display Over Other Apps Shows the block/delay overlay on top of blocked apps Nothing. It's a display permission.
Usage Stats Tracks your daily screen time per app for time budgets App usage durations. Stored locally in a Room database on your device.

No internet permission. No camera. No contacts. No location. No storage.

Tech stack

  • Kotlin + Jetpack Compose + Material 3
  • Hilt (dependency injection), Room (local database), DataStore (preferences)
  • Coroutines + Flow for reactive data
  • Clean Architecture: domain/ has zero Android imports -- fully unit-testable on JVM
  • Min SDK 26 (Android 8.0), Target SDK 34

Running tests

./gradlew test                    # Unit tests (JVM, no device needed)
./gradlew connectedAndroidTest    # Instrumented tests (needs connected device)

Roadmap

  • App blocking (hard block, delay, breathing)
  • Per-app daily time budgets & app groups
  • In-app blocking (Reels, Shorts, Explore feeds)
  • Schedule-based rules (day-of-week + time-of-day)
  • Interaction counter & auto-kick
  • Usage stats dashboard with charts
  • Export/import rules
  • Grayscale mode
  • QR code unlock (physical friction)
  • NFC tag unlock
  • Widget support

Contributing

Issues and PRs welcome. If Instagram or YouTube changes their UI and breaks in-app detection rules, that's especially useful to report.

License

GPL-3.0. The code stays open. Fork it, improve it, share it.

About

Privacy-first Android app blocker with delay-to-open, reel/click counters, and per-app time budgets. No internet permission. Open source.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages