Notifilter

On-device promotional notification filter for Indian Android. Nothing leaves your phone.

0.996KEEP-recall (test)
0.910Promotional F1
18 msper notification
32 MBint8 model

What it does

BLOCKGet ₹200 cashback on your next order
KEEP₹200 cashback credited to your wallet

Same words, opposite meaning. One is an offer you lose nothing by never seeing; the other is a record of your money moving. Keyword filters cannot tell them apart.

How a notification is decided

notification
   ├─ on your allowlist?      → KEEP  (never classified)
   ├─ OTP / debit / delivery? → KEEP  (rule, not a probability)
   └─ otherwise              → model  p ≥ 0.9724 → BLOCK

An OTP never reaches the model. The rule layer fires on 3.8% of traffic at 99.2% precision — a classifier gives you an average, and a one-time password needs a guarantee.

Languages

ScriptTest rowsKEEP-recallPromo F1
Latin / Hinglish24360.9970.911
Devanagari1780.9900.946
Bengali2600.9950.864
Telugu231.0001.000
Gurmukhi221.0000.769
Kannada200.9090.947

Tamil, Malayalam, Gujarati, Odia, Assamese and Urdu are trained but have too few test rows to quote a number honestly.

Model delivery

The APK ships without the model. Cloudflare Pages caps files at 25 MiB, so the 32 MB model is gzipped to 20.9 MB and split into two parts, each SHA-256 verified on arrival and again after reassembly.

GET /models/manifest.json
GET /models/model.onnx.gz.000   10.5 MB
GET /models/model.onnx.gz.001   10.5 MB
      → concat → gunzip → verify sha256 → cache on device

Honest limits