This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
Outside is a small, private Android app that gets me off the screen and into the world. I tap "I'm outside", put the phone in my pocket, and walk. While I'm out, the app listens to the sounds around me and writes them into a journal, so a walk becomes "Birds, water, wind" instead of just "20 minutes."
- Streak with rest days: an animated flame counts consecutive days outside. You earn one rest day for every 7 days outside, so one missed day doesn't wipe out your streak.
- Automatic sound journal: it labels sounds in 5-second windows (birds, wind and leaves, water, traffic, voices, animals, bells, footsteps) and saves only the labels.
- Approximate step count from the phone's motion sensor.
- Time-of-day sky: the header changes from dawn to night with the clock.
- Journal as text: any walk can be exported as plain text that I own.
It is for anyone who wants a gentle reason to go outside. It is deliberately not social: no account, no feed, no photo posting, no server. The screen is only used for a few seconds at the start and end of a walk.
Demo
Code
https://github.com/Nirajkam/outsideapp_week1challage_hacktoberfest
How I Built It
- Open-weight model: YAMNet by Google (Apache 2.0), which recognizes 521 sound classes. It runs fully on the phone through TensorFlow.js, with the model files bundled inside the app.
- App: plain HTML, CSS, and JavaScript, wrapped as an Android app with Capacitor. Everything is stored in local storage on the device.
- Turning raw classes into a journal: I grouped the 521 classes into 8 friendly categories. Steady sounds (water, wind, traffic) are scored by their average over a window, and short sounds like birdsong by their peak.
- Listening loop: it starts when a walk starts and stops when it ends. It keeps the screen awake so the microphone keeps working, and classifies 5-second windows in memory.
- Debug view: the app shows the model's top 3 raw guesses on screen, which made tuning much easier.
What I Learned From Testing
I tested by playing sounds near the microphone. Speech was picked up and labeled as "Voices". My first waterfall test was not detected at all. The model's raw classes for running water were missing from my "water" group, and my detection threshold was too high for a steady sound. I added more water-related classes (rain on surface, waves, gush, spray), lowered the water threshold, and switched steady sounds to window averages.
Limits I want to be upfront about:
- It labels sound types, not species. It says "Birds", not "robin".
- It only listens while the app is open and the screen is on, which costs battery.
- Steps are an estimate from the accelerometer, not a real pedometer.
- Android only for now.
Why Does Open Innovation Matter?
- Privacy: microphone audio never leaves the phone. It's classified in memory for a few seconds and then discarded, and only the labels are saved. With a closed cloud audio API, recordings of my walks would go to someone else's server.
- It works with no signal: the model ships inside the app, so it can work on a trail with no coverage, which is where an outdoor app is most useful.
- Free to run: no API keys, no per-request cost, no subscription.
- I could change it: the model is a plain TensorFlow.js file and the category mapping is a JSON file. When water detection failed, I fixed it by editing the mapping and thresholds, which I couldn't have done with a closed black-box API.
Prize Categories
This project uses YAMNet, not Gemma, so I'm not entering Best Use of Gemma. I'm entering the overall prize.

Top comments (0)