Hapoo

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 requires — the same principle shows up at every layer of Hapoo, not just the pitch. The iOS app, the watch app, the widgets, the AR character network and the backend behind all of it are one connected system built around that one idea, not a checklist of features bolted together. Here's the actual shape of it, in the real screens it produces.

Hapoo, a golden dog with long floppy ears
The Scout screen, tracking days out across the month

The Scout screen — every day marked here comes from the motion count, not a GPS trace.

Motion, not GPS, for the everyday count

The phone's own motion coprocessor reads steps and walking distance directly — no GPS running in the background all day. GPS only switches on when you explicitly ask for a traced route worth sharing, which is the difference between a walking app that survives a full day of battery and one that doesn't.

Pepper, one of the characters Vision has to actually recognise

Pepper — sharp-eyed by design, and so is the framework that has to spot her.

On-device Vision, not a photo upload

Checking whether there's actually a dog in a photo happens on the phone itself, using Apple's Vision framework. The image is never sent anywhere to be checked — it either stays on the device or it isn't checked at all.

The Hapoo app icon

Just the app. No login screen sits behind that icon.

No accounts — a device identity instead

Every feature that needs the server (leagues, referrals, the character network, the coach) is keyed by a self-asserted device id, not a login. It's the same trust model throughout the whole app: no password to forget, no account database to breach.

The map, showing nearby parks and network characters to meet

The map — every character on it is placed somewhere real, right now.

A real AR character network

Characters spawn at real park entrances and green spaces, rotated daily by an on-request algorithm that tops up whatever area you're actually walking in — not a fixed city-wide list. Meeting one is GPS-checked server-side, not just tapped from the sofa.

The Levels tab, showing Hapoo's Stray, Settling and Regular tiers

The Levels tab — every tier is a total the ledger can always re-derive.

An immutable, ledger-deduped points system

Every point ever earned is an append-only ledger entry, deduplicated by a stable id — the same walk, the same badge, the same daily bonus can never be paid out twice, and the full history is always reconstructable from first principles rather than trusted as a single mutable counter.

Duke, the 21st and last character on the roster

Duke — last on the roster, rendered by the exact same SwiftUI views as the first.

Swift end to end

SwiftUI on iOS, watchOS and widget targets sharing one attributes model for the Live Activity; Vapor and Fluent on the server, running on an ARM VM. One language, two runtimes, one connected system rather than pieces bolted together.

Why this matters for what comes next

The same principles that make the app honest about battery and privacy also make it fast to extend — the reward catalogue is data, not a release; a new badge is a config change, not a redeploy; the level ladder for a 22nd character slots in without touching the 21 before it.