-
-
Your week: how many times apps interrupted you, and how many of those you opened.
-
The bill, worst offender first. Each bar splits into opened, dismissed and ignored.
-
Every app that interrupted you this week, with its signal rate.
-
When the interruptions arrive, hour by hour.
-
The Doorman holds the apps you name and delivers them together as one digest.
-
You pick who waits at the door. One switch per app.
-
Whatever is being held stays visible, any time.
-
Never held: verification codes, calls, alarms, messages, events, reminders and your dialer.
-
The paywall, with the trial terms stated on the screen that sells the subscription.
-
App icon, 1024 x 1024, uncropped.
Inspiration
Every notification app asks what to silence. None of them can say which apps were worth the interruption, because nobody measures the answer.
What it does
Doorman reads notification metadata on the device and reports signal rate for each app: the share of its notifications you actually open.
The free half is the diagnosis. A weekly interruption count, a per-app bill sorted worst offender first, and an arrival chart showing which hours you are interrupted in.
The paid half, the Doorman, holds the apps you name and delivers them together as one digest at an interval you pick.
Verification codes, calls, alarms, messages, events, reminders and your dialer are never held, whatever you switch on, and neither is anything Android won't let Doorman read.
How we built it
Expo SDK 57 and React Native 0.86, with a local Expo module wrapping Android's NotificationListenerService. The native side owns a SQLite database; aggregation happens in TypeScript. Subscriptions through RevenueCat, opt-in push through OneSignal. No backend, no account, no server. Nothing leaves the phone.
The app ships without QUERY_ALL_PACKAGES and without any AccessibilityService. App labels are resolved only for packages that actually posted a notification.
Challenges we ran into
The denominator. A signal rate built only on user verdicts scored the apps people liked and left the spammers undefined, because the noisiest apps get silence rather than dismissals. Measured over 24 hours on the test phone, every commerce app on it produced zero verdicts.
So an ignored notification counts, a retracted one does not, and a notification younger than 12 hours is undecided and excluded from both sides. Doorman's own interceptions report with REASON_LISTENER_CANCEL and are excluded outright, or the metric would silently corrupt itself while still looking plausible.
Accomplishments that we're proud of
The app is live on Google Play, eleven days before the hackathon's own deadline. The paid tier is a real Play subscription with a 7-day trial, priced in 174 countries. And Doorman scores its own notifications by the same rules as every other app: there is no own-package exemption anywhere in the metric.
What we learned
The honest version of a metric is usually the harder one to compute, and almost every shortcut in this domain corrupts the number while leaving it plausible.
What's next for Doorman
Verifying the USD prices and the trial on a paywall outside India, and a longer window than seven days for people who want a monthly bill.
OneSignal Keep Them Coming Back
OneSignal App ID: e3a2033f-af02-49d8-812b-d8eac7957556
Campaign Push opt-in confirmation was sent on Sep 12, 2026: 1 sent, 1 delivered. Its body says that Doorman's own push counts in your signal rate like every other app, and that claim was then verified on the device.
Push is opt-in. Since 1.0.3, configurePush does not start the OneSignal SDK unless Doorman's own flag, false by default, is on or an unsubscribe is still owed, and the SDK's self-starting receivers ship disabled. An install nobody opted in on registers no device and tells OneSignal nothing. When push is on, setConsentRequired(true) and consent both come before initialize. In-app messages are paused.
Three things are never a push. The digest is built and posted on the device, so no server can know what you were sent. Scheduled re-engagement is not sent at all. And the paid tier is never sold by interruption.
BuildInPublic
- X: https://x.com/AnuragSDE
- LinkedIn: https://www.linkedin.com/in/anuragvaishnav/
- Instagram: https://instagram.com/anurag.sde
45 numbered posts on X from Aug 16 to Sep 30, 2026, plus three Sunday summaries on LinkedIn, every one of them during the build.
What it changed: the signal-rate denominator was rewritten because of it. Posting the metric in public meant having to defend it in public, and the version that counted only dismissals and taps could not be defended once someone asked what happens to the apps you never answer. The daily deadline is also what kept the ship date honest, and the app was on Play on Sep 7.
HAMM
A 7-day free trial on both plans, then USD 4.99 monthly or USD 29.99 yearly, live in 174 countries, with India held at its own prices of ₹290 and ₹1,900 rather than converted. The yearly is half the monthly run rate in both currencies, so the discount reads the same in every market.
The paywall states the trial terms on the screen that sells the subscription. The free half stays free: signal rates, the bill and the arrival chart are never gated, switching an app off is never gated, and Restore is reachable without buying anything.
Results: one purchase completed end to end through Play licence testing on Sep 16, revenue zero. The pricing and the trial are real and live.
Design Award
Look at the bill. One card per app, the bar split into opened, dismissed and ignored, worst offender first, with the signal rate as the headline number.
Then look at Not counted, which shows the rows excluded from the rate instead of hiding them: notifications still in your shade and too recent to call, and the ones the app took back before you answered.
The app is one screen deep everywhere, has no onboarding carousel, and states the permission it needs in the words of what it does with it.
Peace Prize
Attention is taken without a receipt. Doorman issues the receipt, then gives people a way to take the interruption back without uninstalling anything and without cutting themselves off from the people trying to reach them: codes, calls, alarms and messages are never held.
It also refuses the tools that would have made it grow faster. No re-engagement push, no selling the paid tier by interruption, no analytics SDK, no advertising ID, and no backend that could know what you were sent.
Grand Prize
Published Sep 7, 2026. Since then: a production update on Sep 15, subscriptions taken from India only to 174 countries on Sep 18, a 7-day trial added on both plans, 1.0.1 live on Sep 20, 1.0.2 live on Sep 24, 1.0.3 live on Sep 28, 1.0.4 live on Sep 30, and 45 build-in-public posts on X by Sep 30. Revenue so far is zero.
A note on the video
The walkthrough is recorded on an emulator running a demo data set used for store captures, so the app names are generic words and the numbers on screen are not measurements. The paywall near the end is a live screen from a phone.
Built With
- android
- eas
- expo-router
- expo.io
- kotlin
- onesignal
- react-native
- revenuecat
- sqlite
- typescript