For the technically curious
One idea, carried through every layer.
Hapoo is a free iPhone app that counts the dog walks you already do using your phone's motion sensor, with no GPS tracking and no account required.
Notice what's already happening, and never ask for more than that needs. The same principle runs through the iPhone app, the watch, the widgets, the character network and the server behind them. Here's the actual shape of it, in the real screens it produces.


Walk detection
Motion, not GPS, for the everyday count.
Your phone's motion coprocessor already counts steps and distance all day, for practically nothing. Hapoo reads that, and your walking history in Apple Health, after the fact, so there's no GPS running in your pocket and no start button to forget.
GPS only switches on when you explicitly ask for a traced route worth sharing. That's the difference between a walking app that lasts the day and one that doesn't.

Photos
The dog check happens on the phone.
When you take or choose a photo, Apple's Vision framework checks there's actually a dog in it, on the device itself.
The image is never uploaded to be checked. It either stays on your phone, or it isn't checked at all.

Identity
No accounts. A device identity instead.
On first launch the app makes up a random identifier and keeps it on the phone, with no name, no email or phone number behind it. Every feature that needs the server (leagues, referrals, the character network, the coach) is keyed by that, not a login.
It's closer to a cloakroom ticket than a membership card: it proves the walks are yours without knowing who you are. No password to forget, and no account database to breach.

The character network
Characters at real park gates, placed today.
Characters spawn at real park entrances and green spaces, rotated daily by an algorithm that tops up whichever area you're actually walking in, on request, not a fixed city-wide list.
Meeting one is an AR moment, and it's GPS-checked on the server: the coordinates have to be plausible for a walk, so nobody collects a character from the sofa.

Points
Every point is a ledger entry, paid once.
Every point ever earned is an append-only entry, deduplicated by a stable id. The same walk, the same badge, the same daily bonus can never be paid out twice.
So your total is never a single number we simply trust. The full history can always be rebuilt from first principles, level by level.

The stack
Swift end to end, built as one piece.
One language across two runtimes, so the app, the watch, the widgets and the server are one connected system rather than parts bolted together:
- SwiftUI on iPhone, Apple Watch and the widgets.
- One shared attributes model behind the Live Activity.
- Vapor and Fluent on the server, running on an ARM VM.
- Apple's own frameworks on the device: motion and Apple Health for walks, Vision for photos.
What comes next
Built to grow without a rewrite.
The same principles that keep the app honest about battery and privacy also make it quick to extend. The reward catalogue is data, not a release. A new badge is a config change, not a redeploy. A 22nd character's level ladder slots in without touching the 21 before it.