Reps With Friends β Master Plan
Version 0.1 Β· 26 Aug 2026 Β· Alexei Brown
0. Strategy in one paragraph
Win the empty niche β handicapped, small-group fitness competition delivered inside the group chat β by shipping a playable WhatsApp/Slack bot fast (weeks), using in-browser pose counting for rep verification ($0, no approvals), and letting the chat broadcast loop do acquisition. The app is the scoreboard and the archive; the chat is the arena. Monetise later through corporate wellness once the loop is proven.
1. Phases
Phase 0 β Due diligence & alignment (this week)
- [x] Private repo + research (OpenGym landscape, wearables) β done, see docs 04/05
- [x] Business analysis β done, see doc 01
- [ ] Reply to Ben β get the Figma + full blueprint (ask explicitly)
- [ ] Call: align on MVP scope, equity conversation, roles. Key questions below.
- [ ] Audit the Figma against this plan; flag what's missing/rubbish/needs room (he asked for it)
Questions for the call:
- Handicap mechanics as he imagines them β self-assessed baseline? Historical?<br>(Our v1: self-reported fitness tier β effort multiplier; v2: %HRR-based.)
- Rep verification expectations β is camera-in-browser acceptable for MVP?
- Charity pot: who holds the money? (Platform vs. honour-system vs. partner charity)
- Corporate mode: any live prospects/LOIs? That changes build priority.
- Equity: what split is he imagining, vesting, IP assignment on the blueprint.
- Who else is involved? (Nico's role, any other collaborators.)
Phase 2 β MVP: "the 300 loop" (~6β8 weeks)
Goal: 3β5 real group chats playing weekly.
Scope:
- game-core (this repo, started): match engine, handicap scoring v1,<br>standings, charity pot ledger. Pure TypeScript, fully tested.
- WhatsApp bot via Qalarc Hub (dev/dogfood) β WhatsApp Business Cloud API<br>(prod). Commands: create match, pick exercises, log reps, standings, winner.
- Slack bot (Bolt.js): same command surface, slash commands + interactive<br>buttons. Slack first for corporate pilots.
- Web app (PWA): join link from chat β log reps with camera pose counting<br>(MoveNet/BlazePose in-browser) or manual entry β live match view β<br>shareable result card.
- Handicap v1: fitness tier (self-set, adjustable) β effort multiplier.<br>Honest, simple, tunable. Ship it, learn, replace with %HRR in Phase 3.
Explicitly OUT: native apps, Apple Messages, cash anything, custom ML models.
Phase 3 β Effort truth & wearables (~+8 weeks)
- Handicap v2: %HRR (Karvonen) β score = reps Γ (your %HRR Γ· your baseline<br>%HRR for that exercise). Any BLE chest strap via Web Bluetooth; Apple Watch<br>via HealthKit live HR; Android via Health Connect (sync-only, cross-check).
- WatchOS/Wear OS companions (rep counting from wrist accelerometer).
- Season/league structure (the long-arc retention fix).
- Shareable clip generation (auto-cut mid-set footage + result card overlay).
Phase 4 β Business layer
- Corporate mode: Slack enterprise install, org dashboards, team-vs-team<br>leagues, invoicing. <strong>This is the revenue engine.</strong>
- Charity pot mechanics with a partner charity (legal structure first).
- WHOOP/Garmin/Google Health cloud verification (recovery-adjusted handicaps).
- Messenger bot; revisit Apple when/unless an API ever appears.
2. Architecture (summary β full detail in doc 03)
βββββββββββββββ ββββββββββββββββ βββββββββββββββ
β WhatsApp botβ β Slack bot β β Web PWA β
β (HubβCloud) β β (Bolt) β β (React) β
ββββββββ¬βββββββ ββββββββ¬ββββββββ ββββββββ¬βββββββ
ββββββββββ¬βββββββββ΄ββββββββββββββββββ
βΌ
βββββββββββββββββ ββββββββββββββββ
β RWF API ββββββΆβ Postgres β
β (Hono/TS) β β + Redis β
βββββββββ¬ββββββββ ββββββββββββββββ
β
βββββββββΌβββββββββ
β game-core β β pure TS library: match engine,
β (this repo) β handicap scoring, pot ledger
ββββββββββββββββββ
-
Monorepo (Bun workspaces):
packages/game-core,apps/api,<br><code>apps/bot-whatsapp</code>, <code>apps/bot-slack</code>, <code>apps/web</code>. - Chat adapters are thin β they translate platform events into the same<br>command bus, so adding Messenger later is one adapter, not a rewrite.
- Match state in Redis (live standings), history in Postgres.
- Pose counting runs client-side in the browser (MoveNet via TF.js) β no<br>video leaves the device, no GPU bill, privacy story for corporates.
3. KPIs
| Phase | Metric | Target |
|---|---|---|
| MVP | Groups activated | 3β5 real chats |
| MVP | Matches/group/week | β₯1 |
| MVP | % reps camera-verified | β₯40% |
| Growth | New users per match broadcast (viral k) | β₯0.3 |
| Growth | W4 retention of a group (still playing) | β₯60% |
| Business | Corporate pilots | 2 by Phase 4 |
4. Coordination note
Another agent is researching this opportunity in parallel β reconcile findings before the call. This repo is the canonical home for all RWF work product.