DEV Community

Tora Labs
Tora Labs

Posted on

Why I Built a Screen Time Tracker That Never Sees Your Data

I spend too much time on my phone. This is not a confession, it's a demographic fact. The average is somewhere around 3 hours a day, and I was right in that range. Mostly Instagram Reels, mostly in the evenings. I'd start scrolling and suddenly realize two hours had passed.

The turning point was a Huberman Lab episode where he discussed a 2017 study ("Brain Drain" by Ward et al.) showing that the mere presence of a phone in the same room, even face-down, even if you're not thinking about it, measurably reduces cognitive performance. Not distraction. Presence. That reframed the problem for me: this isn't about willpower. It's about designing small friction points that interrupt the autopilot.

So I decided to build my own tracker. And along the way, I discovered that the most popular tools for measuring this problem have a privacy problem of their own.

The screen time tracker trust problem

When I started looking for a tracker, the big names kept appearing: StayFree (~200K Chrome users, millions of Android installs), StayFocusd (~600K Chrome users), and ActionDash (1M+ Android installs).

All three are owned by Sensor Tower, Inc., a mobile data intelligence company that sells app usage analytics to enterprise clients like Microsoft, Tencent, and UBS.

In 2020, BuzzFeed News reported that Sensor Tower had secretly operated at least 20 VPN and ad-blocking apps that harvested user data without disclosing their connection to the company. Apple confirmed removing a dozen for policy violations. Three months later, Sensor Tower acquired StayFree and ActionDash, stating the deal would "strengthen Sensor Tower's data offering." That's a direct quote from their press release.

StayFree's Chrome Web Store privacy disclosure lists the "Web History" data category, which Google defines as including "clicks, mouse position, scroll, or keystroke logging." Sensor Tower's own privacy policy for these apps lists collected data including ads displayed in social media feeds, e-commerce transaction data, and demographic information, used to "power and sell" their commercial intelligence products.

Meanwhile, Web Activity Time Tracker (WATT), the popular open-source alternative, was sold by its developer to a buyer operating under adsmediaextensions.com without notifying existing users. Users raised concerns about the undisclosed ownership change and potential changes to the extension's behavior.

The pattern is consistent: in the screen time tracking space, the users are the product.

A local-only architecture

I built ScreenTally, a screen time tracker for Android and Chrome where everything stays on the device. No backend server, no API, no accounts, no telemetry. The app can't send your data anywhere because there's nowhere to send it. This isn't a policy decision. It's an architecture decision. There is no server.

Full disclosure: I'm not an engineer by training. I built this with AI coding tools (Claude Code) and a lot of stubbornness. The technical lessons below are things I learned the hard way, not things I knew going in.

Android: The usage data trap

Android gives you two ways to query app usage: individual events (app opened, app closed) or aggregated daily totals. I started with individual events because they give you session-level detail. Then I discovered they silently go missing. A 23-min Instagram session showed up as 2.5 min of fragments with a 33-min gap of nothing.

No error. No warning. The data just isn't there.

The fix was switching all totals and alerts to the aggregated daily stats, which returns the same numbers as Google's own Digital Wellbeing. Individual events are still useful for showing session lists, but only as supplementary, best-effort display. I dropped session-based alerts entirely. An alert that sometimes fires and sometimes doesn't erodes trust faster than having no alert at all.

Chrome: Notifications that never arrive

The Chrome extension tracks time using browser APIs and stores everything locally. No server involved here either.

For per-site blocking, the extension injects warning banners and full-page block overlays directly into the page you're visiting. This also solved an unexpected problem: desktop notifications are silently suppressed by Windows "Do Not Disturb" mode. No error, no indication anything went wrong. The notification just never shows up. In-page overlays bypass the OS notification system entirely, so they work regardless of your system settings.

Making suggestions not annoying

Both platforms suggest adding apps and sites you use heavily but aren't tracking yet. The hard part was making this helpful without being pushy. Nobody wants an app that nags them every time they open it.

The rules I landed on: if you dismiss a suggestion, it stays gone for 90 days. Dismiss it again and it's gone permanently. Productivity apps like email and calendar are never suggested. And dismissed items don't immediately get replaced by new ones. You only see fresh suggestions next time you open the app.

Localization footnotes

ScreenTally supports 11 languages, about 260 strings each. A few things surprised me:

  • You can't just translate the words and call it done. Time formatting is different in every language. "2h 30m" becomes "2시간 30분" in Korean and "2時間 30分" in Japanese. Turkish uses "2sa 30dk." Each one needed its own formatting branch.
  • Tone matters more than vocabulary. Russian consumer apps use informal language. The formal phrasing that's technically correct sounds like a government form. Getting this wrong doesn't break anything, but it makes the app feel foreign to native speakers.

The result

ScreenTally is free on both Google Play and the Chrome Web Store. All data stays on your device. No accounts, no cloud, no ads.

If you have questions about the project, the privacy approach, or anything else, I'll be in the comments.

Top comments (0)