UXRay
A screen overlay that flags manipulative interface patterns.
Mohammad Zohaib’s heads-up display watches the whole system and asks Jev whether what is on screen is a dark pattern.
# Dark Pattern HUD (UXRay) System-wide overlay that reads **visible** on-screen text via an `AccessibilityService`, sends it to TypeSafe's Jev API, and shows a floating badge when a manipulative UI pattern looks likely. It never sends password-field values, and it skips the scan entirely on screens that look like card / PIN entry. ## Setup 1. Open `~/Projects/UXRay` in Android Studio. 2. Install on an emulator or device (min SDK 26). 3. Launch **Dark Pattern HUD**. 4. Paste a Jev API key and tap **Save key**. 5. Tap **Enable in Settings**, then turn on **Dark Pattern HUD** under Accessibility. This cannot be granted from the app. 6. Tap **Grant overlay** and allow **Display over other apps**. Logcat tag: `UXRay`. The first real Jev response is logged in full so the Noul probability field can be confirmed. ## Confidence bands | Probability | What happens | |---|---| | ≥ 0.9 | Floating badge names the pattern(s). Tap the badge for detail, then dismiss. | | 0.6–0.9 | Quiet review log in the app. No interruption. | | < 0.6 | Discarded. | Session stats (screens scanned, median latency, cost from `input_tokens` at **$0.042 / million input tokens**) stay in memory. API errors are logged and swallowed — the service never crashes the foreground app. ## Test plan After enabling the service and overlay: 1. Open Indian shopping / food-delivery apps (Flipkart, Amazon.in, Swiggy, Zomato, Meesho). 2. Scroll product, cart, and checkout-adjacent screens — **stop before entering card or UPI PIN**. 3. Screenshot or screen-record any screen where the badge fires. 4. Open Dark Pattern HUD again and note any **0.6–0.9** review-log rows. That middle band is the interesting result, not only the obvious catches.