Inspiration

Hours of headphones and bright screens quietly strain our ears and eyes, and the change is so slow that nobody notices it. Smart-Senses is built for the student or developer who codes or studies for hours with music in their headphones and doesn't notice the volume creeping up. The same goes for anyone scrolling in a dark room with the screen far brighter than the room needs.

I wanted something that watches for these habits in the background, using only the phone you already have: no wearable, no test, no account.

Smart-Senses is a nudge, not a medical device. It estimates risk from your habits and never diagnoses anything.

What it does

Smart-Senses is an Android app that watches two habits while you're busy in other apps.

  • EARS: headphone volume. With headphones connected (wired, USB or Bluetooth) and music actually playing:
    • Volume at 80% or more for 15 continuous minutes gives an amber card
    • Volume at 95% or more for 5 continuous minutes gives a red card
    • 60 minutes at or above 80% in a day gives an amber card, once a day
    • Paused music doesn't count, lowering the volume resets the timer, and the phone's built-in speaker never counts
  • EYES: a bright screen in a dim room. Brightness at 70% or more while the light sensor reads under 20 lux for 10 minutes gives an amber card. Between 22:00 and 06:00 the wording mentions the late hour.

When a rule fires, a small green terminal-style card drops from the top of the screen over whatever you're doing. It stays about 5 seconds and can be swiped away.

  • Tap it to open Insight: the rule, the reading, the duration, the time and the output, plus Snooze 1 hour
  • A 10-minute cooldown per rule, at most 3 cards a day, and no card while the screen is off or locked
  • Dashboard with live Ears and Eyes status and a System Log
  • History of every listening session and warning
  • Trends for today, a week, a month or 6 months, with the 80% volume line and 70% brightness line marked
  • Patterns that flag an upward trend once there are 4 listening days
  • Limits: set a maximum volume or brightness, and when you push past it, it snaps straight back with a witty green card

Everything stays on the phone: no account, no analytics, and no internet permission.

How we built it

I started from an empty folder and used the Devpost Learn Skill Pack with GitHub Copilot CLI. The skills interviewed me first, and the answers became scope.md, prd.md and spec.md. A checklist.md then broke the build into verified, committed slices.

  • App: Kotlin, Jetpack Compose and Material 3, in a single activity
  • Monitoring: a foreground service that checks every second and saves a reading every 10 seconds, and resumes after a restart or an app update
  • Readers: AudioManager for headphone output, volume and playback, plus the brightness setting and the light sensor
  • Rules: plain Kotlin with no Android imports, covered by 42 unit tests (17 Ears, 12 Eyes, 6 Patterns, 3 Trends, 4 Limits)
  • Warning card: a Compose card in an overlay window, with a spring drop and swipe-to-dismiss
  • Storage: Room and DataStore, all on the device
  • Charts: a hand-drawn Canvas chart

I tested it on a Samsung Galaxy A03 running Android 13.

Challenges we ran into

  • Android's media volume setting is only a proxy for risk. The same setting is louder on some headphones than others, so the app says it estimates and doesn't measure.
  • Android can't tell Bluetooth headphones from a Bluetooth speaker, so both count.
  • Samsung's battery manager can stop background monitoring. Instead of pretending, the app shows MONITORING: STOPPED, and opening it starts monitoring again.
  • Warnings had to help without annoying, which led to cooldowns, a daily cap and snooze.
  • The real timers run 10 to 15 minutes, so I added Demo mode. It shortens them to 1 minute, resets cooldowns and snooze, and still needs real headphones, real playback and a real light reading.
  • Limits snap back rather than block, and Samsung's volume panel can flash the higher step first. If Android pauses the monitoring loop, the missed time isn't counted, so the app may under-count but never over-counts.

Accomplishments that we're proud of

  • Real warnings that drop over other apps on a real phone, not a mock-up
  • Context-aware rules: headphones only, playback only, and brightness judged against the room's light
  • A privacy-first design with no internet permission, no account and backups turned off
  • Rule logic that is separate from Android and covered by 42 unit tests
  • Planning docs in the repo that show every decision, from scope to the verified build slices

What we learned

  • Planning before building keeps AI-assisted code from turning into a mess, and it let me explain every decision
  • Keeping the rules in plain Kotlin made them easy to test and reuse
  • Being honest about what the app can't measure made the design better
  • A foreground service on Samsung phones needs clear setup guidance for permissions and battery settings

What's next for Smart-Senses

  • Device temperature as context for the other signals (the Device card is a placeholder today)
  • A room-light chart and multi-day Eyes patterns
  • Font-size and caption settings as slow-moving signals
  • A weekly, sourced Sensory Trends report that describes habit patterns, never diagnoses, and is checked by an auditing step
  • A one-tap way to clear history

Built with

Kotlin, Jetpack Compose, Material 3, Android SDK, foreground service, AudioManager, Android light sensor, Room, DataStore, Gradle, GitHub Copilot CLI, Devpost Learn skill pack, Git, GitHub

Built With

  • android
  • android-foreground-service
  • android-light-sensor
  • audiomanager
  • datastore
  • devpost-learn-skill-pack
  • git
  • github-copilot-cli
  • gradle
  • jetpack-compose
  • kotlin
  • material-3
  • room
Share this project:

Updates

Submission history