Work · Mobile
Khutwa
A native Android activity tracker built around sensor accuracy and complete data privacy.
The invariantΔ = 0An illustration of the invariant — figures are representative
The step detector supplies timing only. The total is never its job.
0Stored history, summed
0Live counter
Δ 0Delta
The problem
Step counters disagree with each other and with themselves. Totals drift when the application is killed, and daily history stops reconciling with the live sensor. Most applications hide the discrepancy rather than resolve it.
Approach
- Two sensors with separated responsibilities: the hardware counter is the sole authority on totals and survives process death, while the detector supplies the timing data that drives cadence and activity classification.
- One invariant is held and checked: stored daily totals must sum to exactly the live counter. It is verified on device and exposed as a diagnostic anyone can re-run.
- No advertising, no analytics, no telemetry. Exactly one file in the codebase opens a network socket, and it fetches map tiles.
Measured
7,600lines of Kotlin across 42 files
0delta between stored history and the live counter
6Jetpack Compose screens
0ads, analytics or telemetry
Built with
- Kotlin
- Jetpack Compose
- Room
- SensorManager
- AlarmManager
- Foreground Services
Stated plainly
Currently a debug-signed build with Arabic-only strings. Release signing and store listing remain outstanding — packaging work, not new engineering.
Next projectQuantitative method