Inspiration
Everyone knows they should walk more, and almost nobody does it consistently. Step counters give you a number, and numbers get ignored after a week. We kept asking what actually gets people off the couch, and the answer was obvious: games and friends. People will walk miles to catch a Pokémon or keep a streak alive. We wanted to point that energy at everyday health, so walking stops being a chore and becomes the way you win.
What it does
StepBuddy turns your daily steps into a mythical beast you raise and battle with.
- Walk to grow. Every 100 steps earns a Stride Point. Spend points to level up your beast, sharpen its attack and evasion, and evolve it from egg to baby, teen, and adult.
- Collect beasts. 23 mythical species across four elements (fire, water, nature, sky), from common jackalopes to legendary hydras and thunderbirds.
- Battle your friends. A turn-based fight where you choose to attack, guard, or charge a special move, and elements counter each other. Your stats come from how much you've walked, so the friend who walks more is genuinely harder to beat.
- A buddy that's alive. Every beast gets its own AI-generated personality and voice. It cheers when you hit your goal, gets proud on a streak, sulks after two losses in a row, and remembers what it said to you.
- Walk together. On the Map tab, a 3D version of your buddy walks beside you on a real map, following your GPS.
- Rest and recover. A beast that loses a fight needs time to rest, which nudges you to walk while it recovers instead of spamming battles.
- See your impact. Weekly step charts, streaks, your best day, total distance in km or miles, and the CO₂ you saved by walking instead of driving.
It runs in the browser and installs to your home screen like an app. No smartwatch or wearable is needed: your phone is the pedometer.
How we built it
- Frontend: a mobile-first Progressive Web App in plain JavaScript, with no framework. It works offline through a service worker, and has retro pixel art plus sound effects for every punch, miss, win and loss.
- Step counting: browsers have no pedometer API, so we built our own peak detector over the phone's accelerometer signal, filtering out gravity and jitter to pick out real steps.
- Google Gemini: generates each buddy's personality (traits, a quirk, a speaking style, and which voice suits it) using structured JSON output. Then it writes in-character lines that react to your mood, streaks, level-ups and battles.
- ElevenLabs: gives every buddy a real voice that matches its personality, and mood changes the delivery. Audio is cached so a repeated line never costs credits twice, and we pre-generate likely lines so the buddy answers instantly.
- Google Maps + three.js: a 3D animated buddy walks on a live map, either a retro restyled map or a tilted 3D city with buildings. GPS distance counts toward your steps, and impossible jumps are filtered out to stop cheating.
- Tiger Data (Postgres): stores players, steps, battles, friends and leaderboards. The server automatically falls back to a local SQLite database if Tiger can't be reached, so the game never goes down mid-demo.
- Backend: Node.js 22 with almost no dependencies. The only package is the Postgres driver, and the test suite covers the game rules and the API end to end.
Challenges we ran into
- There's no pedometer in the browser. We had to build step detection from raw accelerometer data and tune it until normal walking registered without counting every bump.
- iPhone audio rules. iOS blocks sound that doesn't start from a tap, so voices and sound effects would silently fail. We "unlock" every audio channel on the first touch.
- API rate limits. ElevenLabs caps how many requests can run at once, so we built a priority queue where live conversation jumps ahead of pre-generated lines.
- Balancing battles. Our first design ended fights after five rounds, so upgraded beasts would "lose" while still sitting at 60 HP. We reworked the rules so fights go to a knockout and upgrades actually matter.
- GPS noise. Phones report sudden jumps (tunnels, pockets, bad signal), which could have counted as huge walks. We filter out anything physically impossible.
Accomplishments that we're proud of
- A buddy that genuinely feels alive, with a personality, a voice, moods and memory, which turns "go for a walk" into "go hang out with my dragon."
- A complete game loop where health is the core mechanic, not a bolt-on: walking is the only way to get stronger.
- Hardware-free step tracking that works on any phone.
- An app that keeps working even when outside services fail: built-in lines without Gemini, the browser's voice without ElevenLabs, local storage without Tiger.
What we learned
- Motivation beats measurement. People don't need more data about their steps; they need a reason to care about them.
- How to run game logic on the server so battles and points can't be faked from the browser.
- A lot about prompting for consistent characters: keeping a personality in-voice across hundreds of lines is harder than generating one good line.
- That the most interesting part of our team was always hidden a few layers down.
What's next for StepBuddy
- Real-time battles and friend challenges, such as "most steps this weekend wins."
- Native apps so steps count in the background all day, using Apple Health and Google Fit.
- Group events where a whole class or office walks together to defeat a giant boss beast.
- Accessibility modes that count wheelchair pushes and other movement, so everyone can raise a beast.
Built With
- elevenlabs
- google-gemini
- google-maps
- javascript
- node.js
- postgresql
- sqlite
- three.js
- tiger-data
Log in or sign up for Devpost to join the conversation.