Kinoku
Menu

A friend invited you

Join this bet.

Bet ID

--

The full bet card (target, opponents, time remaining) loads inside the Kinoku app once you install it and tap the share link again.

Install Kinoku on Google Play

Already have Kinoku installed? This link should have opened the app directly. If it didn't, install above and the bet will be waiting on next launch.

What you're being invited to

A private fitness challenge between friends

Bets are multiplayer challenges between two and twenty people. The host picks a target and a window, you both train, and Kinoku tracks who hits the goal first. No public leaderboard, no profile to set up, no posts to anyone outside the bet.

Type one

Workout count

First person to log N completed workouts inside the window wins. Streak optional.

Type two

Streak

Longest unbroken training streak across the bet window. Rest days count if scheduled.

Type three

Tonnage

Total volume lifted in kilograms. Always stored in metric so cross-unit fairness works automatically.

How it stays private

Bets are the one shared-training cloud feature

Kinoku is offline-first by default. Social Bets is the feature where participant progress numbers (workout count, streak length, tonnage total) sync between people via Firestore. Your broader training record never leaves the device.

Auth is anonymous: Firebase issues a per-install token, no email, no password, no profile. Firestore rules deny cross-bet access (you can only read bets you're a participant in or that are still in the JOINING phase, like this one). App Check enforces request integrity. The full security posture is documented in Data Sovereignty.

If you never join a bet, this shared-bet Firestore flow never runs.

Already convinced?

// 3. Uncomment the loadBetPreview() call below. // 4. Verify Firebase Console → Auth → Sign-in method → Anonymous is enabled. // 5. Add kinoku.app to Firebase Console → Auth → Authorized domains. // // async function loadBetPreview(betId: string)