Inspiration
We’ve all opened Instagram, TikTok, or YouTube to watch one thing, only to look up much later wondering where the time went. Many screen-time tools rely on reminders that are easy to ignore, or block access to an app entirely. That can feel so restrictive that people end up deleting the tool instead of changing their scrolling habits.
We wanted to try something more personal—and harder to ignore. We use a surprise interruption to make people notice what they’re doing, with humor instead of another warning or hard block.
What it does
Gotcha is an anti-doomscrolling app that catches you in the act. When someone has been scrolling for too long, Gotcha takes a selfie and turns it into an Instagram post, complete with an intentionally awkward caption and, optionally, a song. The goal is to interrupt the scroll with a moment so unexpected and memorable that users think twice before continuing.
How we built it
We built Gotcha as a native Android app in Kotlin.
Watching for Instagram. An Android accessibility service checks once a second which app is in front. We started by listening for window events, but closing the notification shade over Instagram doesn't send one, so the app thought you had left. Polling fixed that. The service only reads the app's package name, never what's on screen. Being an accessibility service is also what allows the app to open the camera over Instagram from the background.
The hidden timer. The timer is a plain Kotlin class with its own unit tests. It pauses when you leave Instagram, draws a new random target after every catch, and keeps separate daily totals for each profile. Those totals are saved so a restart doesn't reset them.
Taking the photo. We use CameraX with Camera2 interop to read the auto-exposure state on every frame. The shutter fires the moment exposure settles, about one second after the camera appears. That's fast enough that nobody has time to pose, and late enough that the photo isn't dark. The capture screen is built with plain Android Views instead of Compose so its first frame draws in under 100 ms. The white frame around the preview runs at full brightness to light your face in a dark room.
The rest of the app. Everything else uses Jetpack Compose and Material 3: the Wall of Shame, the photo viewer, the login screen and the friend piles. Photos, stats and profiles are stored only on the phone, and the app has no internet permission.
Testing. We tested first on an emulator, using a debug switch that treats the Settings app as Instagram since the emulator has no Instagram. After that we tested on a real Pixel over adb, reading timing logs for every catch.
Challenges we faced
The biggest challenge is making an interruption effective without making it feel invasive or mean-spirited. Using the camera and posting to Instagram require clear user control and consent. We want Gotcha to feel funny because the user is in on the joke—not because their privacy is the punchline.
Another challenge is balancing surprise with control. The interruption needs to be unexpected enough to break the scrolling habit, while giving users clear choices about when photos are taken and what gets posted.
What's next
Post your catch to your Instagram story, so your followers see you scrolling too. Add an ugly filter and send it to your crush. Just knowing who might get the photo is enough to stop you. Turn your catch into an AI image, like you after ten more years of doom-scrolling, and share it. Catch more apps: TikTok, YouTube Shorts and Facebook.
Built With
- accessibility-service
- android
- camerax
- jetpack-compose
- kotlin
- material-design3
Log in or sign up for Devpost to join the conversation.