Sideline speed
Tap to score. Never look up.
One tap per basket. The scorekeeper stays in the game — not buried in a menu. Fouls on every player tile, quick undo for honest mistakes, optional shot spots where the sport demands nuance. The book closes before the last player leaves the court.

Live everywhere
Your friends couldn't make it. They're watching anyway.
CloudKit broadcasts the score the moment it changes — no invite required to follow a live game. Apple Watch puts the live board on the wrist. Lock Screen Live Activity keeps the clock front-and-center with the phone in the bag. When the margin hits two, a clutch-time indicator fires. Nobody has to ask 'what's the score?' in a group chat again.

Real places
Every game pinned to the actual court.
Stats attach to the park they happened at. Your leaderboard is everyone who runs at that same spot. Play Sites anchor the run to a real map pin — not a vague thread — so history, weather context, and court standings all point to the same place.

Achievement Hall
The only flex that requires witnesses.
A Clutch badge means you held a 4-run win streak — and your peers verified every game in it. Not a participation trophy. Not grinding fake tasks. Every badge is grounded in finished, reviewed runs.
Four rarity tiers — Common through Prestige — across profile badges, park medals, milestone trophies, timed challenges, activity streaks, and shareable calling cards. Basketball carries the deepest catalog today; every other sport earns its own rows as each shell matures.

Badge catalog
Every badge you can earn.
28 badges across four tiers. Basketball has the most today. Other sports unlock their own catalog as each shell matures on the platform.
First Drop
Played and closed your first recorded game
On the Board
First points logged in a verified game
W on Record
First peer-verified team win
Home Court
5 games played at the same court
Night Run
Played after 8 pm
Weekend Warrior
3 verified games in a single weekend
Good Sport
Zero conduct flags across 10 games
Tap Keeper
First game kept using the tap board
Clutch
4-run win streak, all peer-verified
Honest Book
Kept score for 10 complete games
Park Regular
20 verified games at the same court
Streak Runner
10 games played within 30 days
Clean Record
Conduct A+ across 20 consecutive games
Court Rat
Played at 5 different courts on record
The Setup
Top-rated playmaker in peer reviews for a season
Bench Filler
Filled a GM-posted roster spot 5 times
Lockdown
Consistent top-graded defensive stops across a season
Sharpshooter
Arc accuracy tracked in the top tier all season
Ironman
50 verified games in a single calendar year
Court Favorite
Highest popularity rating at your home court
Season High
Reached 85+ OVR in any single-season window
Double Threat
Two elite-tier attributes earned in same season
Win Machine
70%+ win rate over 30+ games on record
Reputation Built
Reviewed by 25+ unique players across 3+ courts
The Book
100 games kept as neutral scorekeeper
Court Legend
200 verified games at a single court
Hall of Fame
Community-nominated and voted in by peers
Diamond Run
10 straight wins, every game peer-verified
Badge designs and additional sport-specific tiers are still being finalized. If you're in the beta, you're earning toward these right now — even before they fully render in the UI.
Identity and record
Your record, sealed and portable.
Your games, reviews, and roles attach to one stable player identity — the same identity that carries cryptographic fingerprints today and optional on-chain anchoring tomorrow. Here's exactly what ships when.
Cryptographic game fingerprint
Ships nowEvery finished run generates a SHA-256 hash of the final lineups, scores, and roster — a tamper-evident seal on that exact result. Copy it from any completed game summary under "Proof & integrity."
Stable player & team identity
Ships nowYour profile carries a persistent digital ID across every game and season. The same five players always produce the same lineup fingerprint — deterministic identity for your squad, not a disposable group chat.
ISO 18013 digital credential
iOS 26+ infrastructure builtREADYPLAY includes a full ExtensionKit identity document provider built to the ISO 18013-7 standard — the same spec used for mobile driver's licenses. When issuer credentials are live, your verified player profile becomes presentable to any venue or league that supports the standard. No app required on their end.
On-chain anchoring
Coming soonThe fingerprint payload is already structured for blockchain submission. When wallet signing ships, you'll be able to anchor any finished game's hash on-chain — optional, permanent, verifiable by anyone. Your pickup stats deserve that upgrade path.
On-chain minting and wallet signing are a deliberate next chapter — not something claimed live in the app today. The infrastructure is there when the chapter opens.
Player identity
Your reputation, carried everywhere you play.
You're a 78 overall — not because the app calculated it, but because fourteen people you competed against said so. Your OVR is a community vote, backed by finished games. No self-rating. No self-promotion.
Marcus D.
🏀 Basketball · Hillcrest Park
147
Games
68%
Win rate
A+
Conduct
10 Core Attributes
Add to Apple Wallet — tap to verify without opening the app
OVR tiers
A single number that moves when you play — not when you spend more time in the app. Scoring, shot style, defensive contributions, and peer reviews all feed it.
10 attributes, all earned
Each one built from real game events and peer reviews. Your Screens grade comes from teammates who noticed the pick. Your Morale grade comes from people who actually played with you — not from a form you filled out.
Stats split by context
See whether you play better at home or away, evenings versus mornings, full court versus half. Conduct grade and popularity meter surface how the community rates competing alongside you — not just against you.
Win Predictor
The app calls it before tipoff.
Before the game starts, READYPLAY runs a win probability model on both lineups — blending peer-reviewed attributes, finishing rates, discipline signals, and familiarity bonuses from every prior game those exact teammates have played together. It's not a guess. It's pattern recognition from your actual history.
Peer Attributes
Defense, finishing, shot-making — rated by people you actually played against.
Familiarity Bonus
Teammates who've run together before get a synergy multiplier.
Finishing Rate
Your real shooting conversion from tracked shot events.
Discipline Signal
Foul patterns and conduct from peer post-game reviews.
Mini-Games Hub
Six ways to play when the full run isn't on.
READYPLAY isn't just five-on-five. Launch a solo drill session, challenge a friend to H-O-R-S-E, or run a 3-Point Contest between games. Every mode tracks sessions, shows recap, and feeds your activity history.
H-O-R-S-E
Shot-by-shot side game. Match shots or earn a letter.
3-Point Contest
Solo rack challenge. Five spots, five balls, beat your last score.
2-on-2 3-Point
Team three-point competition. Short game, big bragging rights.
Free Throw Competition
Pressure rounds and percentage totals.
King of the Court
Win and stay. Challengers rotate in until someone's dethroned.
Solo Drills
Warm-up mode. Streaks, makes, timed reps — before the run starts.
On-demand play
Your squad. Your terms.
Play for free, set a rate, or build and pay a full roster — the platform supports all three. Every transaction is backed by verified OVRs, clean conduct grades, and a trust graph built from real finished games.
GM View — Team Builder
🏀 5v5 · Hillcrest Park
Saturday 2 pm · Posted by Ray M. (GM)
Ray M.
Coach / session lead
Squad total
$115
The whole court, managed in one place.
A General Manager posts a game and sets a budget. Players who have listed themselves as available — with their rate or free — show up in the booking list, sorted by OVR, conduct grade, and court history.
The GM picks the squad, including a coach if the run needs one. Each player accepts or declines. Confirmed slots lock in. When the run closes and the game is peer-verified, payment flows.
Trust-gated booking
Players and coaches can only list through verified history. No cold spam.
Mixed rosters
Free and paid slots can coexist on the same team. A player's choice, not the GM's override.
Apple Pay + escrow
Payment holds until the run closes. Nobody gets stiffed. Nobody ghosts.
Cancellation rules
Late cancellations cost something. The platform respects everyone's time — including the player who already showed up.
Paid bookings and Apple Pay escrow are still landing. Players can already mark availability and set rates. GMs can post runs and fill rosters now. Payment flows follow as the trust graph matures.
Play for the love of it
Mark yourself available, join a posted run, and play. No money changes hands. The classic pickup experience — but now your stats, your OVR, and your conduct grade follow you.
- ●No payment required
- ●OVR and record still tracked
- ●Conduct grade still earned
Set your own rate
You decide what you're worth. Set a per-game rate, mark yourself open to bookings, and let GMs find you. Accept or decline each request. Your OVR and conduct grade are the resume — no pitch required.
- ●You set the rate
- ●Accept or decline any booking
- ●Paid via Apple Pay (when live)
Run it as GM
Post a game, fill every roster spot, and pay the whole court through the app. Hire a coach per session, book players individually, or mix paid and free slots however you want. You run the run.
- ●Pay players and coach separately
- ●Mix paid + free roster spots
- ●Escrow protects all parties
Follow live. No invite required.
Couldn't make it? You're still watching.
The scorekeeper shares one link. Anyone who taps it opens the live scoreboard — score, time, last basket, clutch-time alert — without needing to be on either roster. Share it in the group chat and the whole crew follows the run.
01Share the code
Host or scorekeeper taps Share from the live game. One link, one tap.
02Anyone opens it
Recipient taps the link. Full live scoreboard opens instantly.
03Real-time everything
Score updates, clutch alerts at 3-point margin, last scorer shown.
Leaderboards
The person who locked down the paint all winter finally shows up here.
Home ships a real leaderboard — not followers, not likes. Scoring streaks, shot-style splits, win runs, block grades. Ranked against the specific people you actually play with at your court.
No engagement algorithm. No sponsored positions. The order is determined by finished, reviewed games — and nothing else.
0
Win streak
0
Threes this season
0
Blocks graded

What’s actually shipped
Every feature on this page is pulled from our internal Feature Ledger in real time. No hand-curated marketing copy. If it’s here, it’s in the app.
58 shipped · 3 in build
scorekeeping
7 shipped- Mini-game King of the Court on web
- Mini-game 1v1 on web
- Mini-game 2v2 on web
- Live spectator page (SSE broadcast)
- Mini-game Around the World on web
- Pickup game scorekeeping on web
- Mini-game HORSE on web
wellness
2 shipped- Trusted-source priority ladder
- Blood pressure capture (HealthKit + backend + web)
Launch / Onboarding
1 shippedPrivacy
1 shippedgameplay
1 shipped- In-Game Contract Shares Settlement— Real share_transfers + player balances + wiring from game.ended so insured Shares actually move on contract wins. Audit…
Core Game
3 shipped- Marketing / trust landing (web)— Repo `web/`: Next.js static export for READYPLAY (multi-sport positioning; basketball-first copy where relevant),…
- Waitlist form (marketing site)— Real email capture on `readyplay.app` with name/sport/city/referral. Posts to `api.readyplay.app/waitlist`. No third…
- Marketing site on VPS (dynamic SSR)— Marketing site moved from a separate public repo on GitHub Pages → into monorepo at `marketing/` → hosted on the same…
Architecture
3 shipped- Backend: Streak Inventory API (/streaks/me + /public/players/:id/streaks)— New `backend/src/lib/streaks.js` with `computeStreaksForPlayer()` plus per-family helpers. Implements 8 v1 families:…
- Backend: Streak Leaderboard API (/public/leaderboard/streaks)— New endpoint in `backend/src/routes/streaks.js` returning top-N players by `players.current_win_streak DESC`. Excludes…
- Admin: Design DNA Bible sync — StreakMeter recipe × 2— Adds `StreakMeter` recipe to both `PLAYER_WEB.components` and `IOS.components` arrays in `admin/lib/design-dna.ts` per…
Player Profile
27 shipped- Player-web: /streaks/ + /p/[id]/streaks/ routes— New `marketing/lib/streak-api.ts` (client-safe types + public fetchers + selectors) + `streak-api-server.ts` (`import…
- Player-web: Profile overview live block + leaderboard Streaks sub-tab— `ProfileOverviewStreaksPlaceholder()` rewritten to fetch the top-3 active streaks server-side and render them in a…
- Admin player-detail Stats section— Add a "Stats" tab (or section block) on `/admin/players/[id]` with three cards: (1) Recent Games — date, opponent,…
- Per-event achievement anchor (migration 0100)— Adds `triggered_by_event_id`, `triggered_by_event_kind`, and `triggered_by_defender_player_id` to…
- Public recap-narrative read (achievements + defender anchors)— Extends `GET /games/:id/recap` (auth) and `GET /public/profile-stats/games/:id/recap` to return an `achievements:…
- iOS: achievement chips interleaved in play-by-play— In `PlayByPlayTab`, build a `[String: [GameAchievementUnlock]]` index keyed by `triggered_by_event_id`. Render…
- iOS: opposite-side honors (Ring defender, Trophy stopper, Streak killer)— When an unlock carries `triggered_by_defender_player_id`, render the symmetric honor chip under the defender on the…
- Server-side defining-event anchor for matchup unlocks— Enriches `lib/matchupAchievements.js` so the aggregate-at-game-end writer no longer writes null anchors. For…
- iOS achievement-unlock writer (POST /achievements after local reconciliation)— Adds `AchievementUnlocksAPI.publish(_:) / .publishBatch(_:)` in `Red-E Play/Shared/Services/NewsService.swift` (mirror…
- Public read endpoint: GET /public/players/:id/measurables— New unauthenticated read in `backend/src/routes/public.js` returning height (inches + source + observed_at), weight…
- player-web: Attributes, Measurables, and Compare pages with live data— Three new pages under `player-web/app/p/[id]/stats/` close the gap between the nav-config (which already advertised…
- Public SSE channel: /public/profile-stats/players/:id/updates— New public SSE endpoint `GET /public/profile-stats/players/:id/updates` in…
- Web play-by-play: achievement / streak / defender-honor chips inline— Full chip-renderer port from the iOS GameRecapSheet to `marketing/components/public/game-play-by-play-blocks.tsx`…
- Public SSE: in-game score/foul fan-out with 256-row participant cache— The per-player SSE channel ticks on `game.score` / `game.foul` while a game is still `live` — not just at `game.ended`.…
- Public play-by-play: defensive_events + steal/block streak-killer chips— Backend: `GET /public/profile-stats/games/:gameId/play-by-play` and `/live` now return a `defensiveEvents[]` array…
- Canonical labels for player web nav— Renamed in `player-more-hood-overlay.tsx`: "Player card" → **Profile**, "Network" → **Community**. "Stats & training"…
- Flatten Runs back under Activity— Removed **Runs** from `publicProfileMainNavItems` — it was a peer of Activity in the top strip even though…
- Flatten Trophy Room back under Achievements— Removed **Trophy Room** (id=`locker`) from `publicProfileMainNavItems`. `/p/{id}/locker/` still resolves; lives under…
- Drop the standalone Wellness card from the More overlay— Wellness & Watch was a sibling card to Stats in `player-more-hood-overlay.tsx` but is one of seven sub-tabs of the…
- More overlay is overflow-only, not a repeat of the top strip— Rebuilt `buildSections()` so the More overlay no longer lists Profile, Activity, Achievements, Community, or Stats as…
- Bottom mobile tab bar: drop Account, add Activity— Mobile bottom bar in `player-mobile-tab-bar.tsx` previously had Profile · Stats · Account · Cookem · More. Account is…
- Remove dead AccountSubTab "runs" union member— `AccountSubTab` in `profile-nav-config.ts` declared a `"runs"` variant that `accountSubNavItems()` never emitted.…
- Single source of truth: profileNavItems with placement flags— Collapsed `publicProfileMainNavItems` / `accountHubNavItems` / `player-more-hood-overlay.buildSections()` to derive…
- Active-state propagation: sub-tab lights up parent in top strip and bottom bar— New shared helper `resolveProfileNavActive(pathname, playerId)` returns `{ topTab, subTab }`. When a Stats sub-tab…
- Sport-context sticker in ProfileMainNavStrip— The top-strip Profile pill now renders a small sport sticker (basketball / football / etc.) sourced from…
- iOS-parity tab order across player-web top strip— Reordered `profileNavItems` to mirror iOS Profile tab order: Profile · Stats · Activity · Achievements · Community. Was…
- Player-web More overlay mirrors iOS RootMoreDestination— The mobile **More** sheet (`PlayerMoreHoodOverlay` in `marketing/components/player-more-hood-overlay.tsx`) lists the…
Identity + Trust
3 shipped- Deep-link invite landing pages (elev A)— readyplay.app/i/[code] resolves the inviter server-side, renders a personalized hero, and persists the code into…
- Admin invitation tree view (elev D)— /admin/invitations?tab=tree renders the inviter→invitee hierarchy from GET /admin/invitations/tree. Stats row +…
- Inviter social proof (elev E)— lookup-inviter response now includes invitedCount + activeThisMonth so the iOS confirmation card and the marketing…
Marketing & Web
1 shipped- Cinematic web hybrid (@readyplay/cinematic-web)— Shared `packages/cinematic-web/` — Master Bible tokens, ACES filmic renderer (WebGPU/WebGL fallback),…
Social + Discovery
1 shipped- Social activity feed (Postgres)— Replaces CloudKit-public `RedEActivityEventV1` with `activity_events` + `POST/GET /activity/events`. iOS uses the same…
Build & Release
5 shipped- sovereign-deploy.sh: player-web surface— Adds `player-web` to the surface list in `scripts/sovereign-deploy.sh`. `deploy_player_web()` rsyncs marketing source…
- Pipeline status dashboard (single-file Web Components)— New `marketing/public/status.html` — one HTML file, no build step, no framework. Uses native custom elements…
- CORS-enabled /api/version + /health probes (every surface)— Standardizes the version-probe contract across all four web surfaces. **Backend** `/health` (`backend/src/index.js`)…
- Operator script control panel (status.html + admin)— Adds an **Operator** tab to `status.html` (repo root, mirrored into `marketing/public/`). The tab loads `GET…
- Export-compliance posture (BIS license-exception ENC)— iOS app declares `ITSAppUsesNonExemptEncryption = NO` so every TestFlight build skips the export-compliance prompt in…
Profile
2 shipped- Daily HealthKit snapshot push — iOS to backend— iOS `WellnessSnapshotService` reads resting HR, active energy, steps, exercise minutes, walk/run distance, sleep, Apple…
- Per-sport attribute splits — backend aggregation + web render— Aggregates `matchup_impact_ledger` by (sport, attribute) for a player, blends with global `computed_attributes` +…
Operator Tools
1 shipped- Elevation F — "Shot on Osmo, scored on Red-E Play" co-branded creator program— Sponsor 50 youth basketball + pickleball creators with an Osmo Pocket 3 + Red-E Play Pro annual sub. They commit to one…
In build right now
3 partial- Mini-game session sync (iOS → backend)[build---release]
- Per-shot logs for mini-games + court heatmap[core-game]
- Floating Cookem action on player surfaces[player-profile]
Join the run · Early access
Get on the list now.
One minute. Pick your sport, drop your ZIP. We review every new profile to keep the community real — your TestFlight invite hits your inbox the moment we approve you (usually under a day).