Inspiration

Screen time is a total. A day has a pattern.

Most digital wellbeing tools stop at hours and app charts. They rarely explain the rhythm behind the number—when someone kept returning, what clustered together, or how today differed from their own baseline. Deeper analysis also tends to ask people to send intimate behavioral data to a cloud service.

Nadi is a calmer alternative: useful context from phone evidence, processed locally and honest about what the phone cannot know.

What it does

Nadi turns optional Android signals into a private, explainable flow of the day. It can summarize screen sessions, app transitions, movement, phone orientation, media, volume, brightness, ambient light, calls, broad location areas, steps, headphone context, and notification rhythm.

The product is intentionally conservative. Every insight can reveal its supporting evidence, coverage, comparison, and limitations. Missing evidence stays missing rather than becoming zero. Phone orientation is not labeled as body posture; media volume is not presented as ear-level decibels; notification timing is not turned into a psychological diagnosis. Each signal is optional, and analysis stays on-device.

How we built it

Nadi is a native Android app built with Kotlin and Jetpack Compose. Collectors and Android services reduce raw events into small local summaries stored in SQLite. Pattern engines compare compatible days only after enough coverage exists, while the interface presents the result as a readable daily flow with evidence sheets.

Codex with GPT-5.6 was the main development partner. It helped map Android platform constraints, implement collectors and aggregation pipelines, design the Compose experience, challenge unsafe behavioral inferences, handle partial coverage, and run the verification loop across tests, lint, builds, and real-device QA. The repository preserves the resulting architecture, tests, decisions, and setup guidance.

Challenges

Android signals have uneven permissions, lifecycle gaps, vendor differences, and partial coverage. The hardest problem was not collecting more data; it was maintaining epistemic discipline. Nadi needed to remain useful without sounding more certain than the evidence allowed, and private without reducing the experience to a plain chart.

Accomplishments

  • A coherent, working Android product rather than a sensor proof of concept
  • Explainable insights with evidence and limitations
  • Privacy by reduction: raw coordinates, notification content, and app identities are not retained
  • Personal baselines that wait for enough comparable days
  • A polished motion-led daily story backed by extensive automated tests and real-device verification

What we learned

Trust comes from showing limits, not hiding them. Fusing sensors is relatively easy; making each inference inspectable, optional, and honest is the real product work.

What's next

Next we would expand long-term real-world evaluation, battery profiling across Android vendors, export and deletion controls, accessibility polish, and opt-in longitudinal baselines—without changing the on-device privacy boundary.

Built With

  • kotlin
Share this project:

Updates