
StakeFit
Fastest runners on Google Fitbit take the pot over the catalog distance
Demo
About
Racing costs a day, not a race. You pay the entry weeks ahead, then work moves, travel moves, a knee complains, and the bib goes unused. Even when you show up, the start time rarely matches the shape you were in that month. So people either skip the race and eat the fee, or run it flat and wonder what the money bought. The training was real. The result was not. StakeFit races the run you already did. Sign in with Google. Google Health is the only session source, so nothing new gets strapped on. An admin opens one distance from a fixed catalog of 50 m, 200 m, 5 k, and 10 k. You pay the HBAR entry from HashPack, then go run whenever the day allows. We do not time the full lap. A Fitbit bout counts if it started on your own civil day and covered the catalog distance, and the score is the catalog distance at that bout's pace. A 200 m effort scores a 50 m race honestly. Sessions keep syncing on their own, so there is nothing to submit. Other times stay hidden until the race resolves. That keeps the day a pace market instead of a live leaderboard you can chase. When the board opens, the top three split the pot 50 / 30 / 20. A World Selfie Check stands between a result and the money, so one person cannot farm a pot with three accounts. A soulbound HTS run card mints as the receipt. Sepolia holds the market. Hedera holds the pot, the consensus trail, and the token. Next is more wrists. Apple Watch through HealthKit, Garmin, Strava, and Whoop are the same shape of problem: a session with a start time, a distance, and a duration. One qualification rule already sits behind a single shared function, so adding a source means adding a reader, not a second scoring model. More sources also make richer races possible, like heart-rate-capped efforts or elevation-adjusted pace, without asking anyone to change how they already train.
How it's made
Google is the Fitbit pipe. OAuth lands on the orchestrator. Access tokens stay in process memory. Health Connect exercise sessions are pulled after login after pay and on a background tick for anyone who has entered. The web client sends X-Timezone so day bounds are the runner's civil day not the UTC host. That is how we pick the right bout and not yesterday's. The catalog is a sealed TypeScript table. createMarket will not take a custom meter count. Qualification is one shared function. Start in the local day. Distance millimeters at least the catalog. Score is catalog millimeters at session pace or duration times catalog over distance if pace is missing. CRE is written to emit that duration only. The orchestrator mirrors ingestWorkout so the same number shows without a live TEE. Entry is x402 v2. HashPack signs the 402 accept. HBAR settles to the Hedera pay-to account. StakeFitMarket on Sepolia is create enter result resolve. HCS is the trail we replay after a restart. HTS mints the soulbound run NFT. World verifies Selfie Check and we keep the nullifier. The Graph is an indexed read of Sepolia. The live board is orchestrator plus the contract plus HCS. The useful bit is treating Fitbit as an already-run oracle and refusing a public board until resolve so the pot is a catalog-pace market not a live leaderboard.