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

+ 38 more
Share this project:

Updates

Submission history