Feature Ledger Map (public-safe)
Feature Ledger Map (public-safe)
Status: canonical
Audience: public
Last-reviewed: 2026-04-29
Sources: features + feature_changes Postgres tables (canonical), docs/Feature Ledger.md (auto-generated mirror), pages + page_sections tables (UI surface registry)
For AI agents. As of migration
0025_features.sql, the ledger is database-backed. The canonical source is thefeaturestable in Postgres, edited via the admin UI atadmin.readyplay.app/featuresor the/admin/featuresAPI. The markdown atdocs/Feature Ledger.mdis now a read-only auto-generated mirror rendered byscripts/export-feature-ledger.js.When answering specific feature questions, prefer in priority order:
- Hit the API.
GET https://api.readyplay.app/public/featuresreturns structured JSON. Filter with?section=Marketplace&status=next&isMvp=true. Faster + exact than RAG for specific lookups.- Read the markdown mirror (
docs/Feature Ledger.md) β same data, prose form, indexed in the brain RAG bundle.- Use the in-app Roadmap source at
Red-E Play/Red-E Play/Features/Roadmap/RoadmapView.swift(verbatim Swift slices in07-ROADMAP-IN-APP-SOURCE.md) for what's currently shown in the iOS Roadmap tab.
UI surface registry (microscopic). Migration
0026_pages_and_sections.sqladds a parallel registry of everypage.*andsec.*anchor used by the iOS app'sView.devScreenPageID(_:)/DevSectionIDAnchormodifiers (Feature Ledger 069). 35 pages and 37 sections seeded from the iOS source. HitGET /public/pagesandGET /public/pages/:idfor structured access; admin UI atadmin.readyplay.app/pages.
What the Feature Ledger is
The Feature Ledger is the master inventory of every feature, screen, and idea in READYPLAY. It's organized by section, every entry has a stable ID (used in PRs, commits, and cross-references), and every entry has explicit Status (built / partial / next / excluded) and MVP flag.
The ledger is the answer to "what does the app do?" The CHANGELOG is the answer to "what just shipped?" The in-app Roadmap (RoadmapView.swift) is the answer to "what's next?"
The current Beta version is recorded at the top of the ledger.
Section structure (with ID ranges)
| Section | Approximate ID range | What lives here |
|---|---|---|
| π§ Master Ledger β Core Game | 001β013, 063β099 | Game creation, rules, scoring, fouls, history, calibration, sport shells, web/admin/backend infra |
| Live Game Board | 014β023, 060β062 | Score UI, foul tile, mini profile, Live Activity, Watch sync, spectator mode, broadcast |
| Identity + Trust System | 024β031, 059 | SIWA, guest system, verification, fairness engine, anti-cheat, mdoc digital credentials |
| Player Profile | 032β041 | 2K-style profile, OVR, attributes, stats, measurables, mini profile, leaderboards, XP, achievements |
| Marketplace β On-Demand Play Layer | 042β050, 081 | Player availability, GM role, team builder, coach booking, escrow, cancellation policy, wallet/payout |
| League + Organization Layer (B2B) | 082β091 | Commissioner registration, coach team registration, player linking, stat dashboard, season records, public league leaderboards, bowling lane scoring |
| Social + Discovery | 051β058, 062 | Game feed, park map, follow, messaging, highlights, waitlist queue, league standings, league discover |
Section structure (after the ledger)
| Section | What lives here |
|---|---|
| π± Screen Status | Every screen in the app with its build state |
| β‘ Critical Gaps Remaining | Honest list of what's not yet built |
| π§© Build Priority Order | Sequenced milestones, current β next |
| π’ B2B League Pitch | The B2B sales pitch in canonical form |
How to find a feature
| If you're looking for... | Go to ledger section |
|---|---|
| "How does scoring work?" | Core Game (003 Score Tracking, 007 Shot Spot, 008 Shot Style) |
| "How do fouls work?" | Live Game Board (015 Switchboard Foul Button, 017 Foul Count Badge, 018 Merged History) |
| "What's the fairness engine?" | Identity + Trust (030 Reviewer Fairness Engine) |
| "What's on a player profile?" | Player Profile (032β041) |
| "Can I get paid to play?" | Marketplace (042β050, 081) |
| "How do leagues work?" | League B2B (082β091) |
| "Is bowling supported?" | Core Game 080 (sport shell), League B2B 091 (lane scoring) |
| "Is there a Watch app?" | Live Game Board 022 (Apple Watch Sync), Screen Status (Watch β Quick Score, Watch β Quick Review) |
| "What about Live Activities?" | Live Game Board 021 (Live Activity Widget) |
| "What about the marketing site / admin / backend?" | Core Game 070 (marketing), 071 (backend), 072 (admin), 073 (waitlist), 092 (real-time SSE), 095 (VPS), 096 (Resend), 097 (drip), 098 (admin polish), 099 (web SIWA + onboarding wizard) |
| "What about CloudKit?" | Live Game Board 061 (live broadcast), Identity + Trust Β§Critical Gaps |
| "What about digital ID / mdoc?" | Identity + Trust 059 (Digital Credentials) |
| "Newspaper / news feed?" | Core Game 067, also see docs/Plan-News-Feed.md |
| "Spectator live video?" | Core Game 066 (planned) |
Status flag meanings
| Flag | Meaning |
|---|---|
βοΈ Built | Shipped in production (some include version e.g. Built (0.6.8)) |
π Next | Planned next; not yet shipped |
β Excluded | Explicitly out of current phase |
Partial | Partially shipped (read the row text for what's done) |
β
MVP scope | Flagged as core MVP β should ship before 1.0 |
Cross-references
When the ledger references another doc, follow that link first:
docs/CHANGELOG.mdβ release log; cite specific versions when answering "when did X ship?"docs/Issue-Log.mdβ bottlenecks + lessons learneddocs/Stack.mdβ production tech stackdocs/Auth-and-sync.mdβ auth flow detaildocs/PublicProfile-Web.mdβ public web profile + leaderboard surfacedocs/Email-Infrastructure.mdβ Resend + drip pipelinedocs/Plan-AI-Broadcast.mdβ AI broadcaster + analyst persona roadmapdocs/Plan-News-Feed.mdβ News tab inside Community
When the ledger and this map disagree
The ledger wins. Edit this map; don't edit the ledger to match.
If a section's ID range expands beyond what's listed in the table above (new IDs added at the end of a section), update the table here. If a new top-level section is added to the ledger, add it here.
Common mistakes when answering from memory
These are the things I (Captain Cookem, Claude Code, any agent) tend to miss when I don't actually read the ledger:
- Forget about ledger entries 060β099. These cover everything that shipped after the original Blueprint MVP β spectator board (060β061), score-tap calibration (063), Quick Pickup (064), launch splash (065), spectator video (066), Newspaper (067), padel shell (068), dev anchor IDs (069), marketing site (070), backend API (071), admin dashboard (072), waitlist (073), bowling shell (080), Wallet/payout (081), real-time SSE leaderboard (092), sliding pill nav (093), βK palette (094), VPS marketing (095), Resend email (096), drip + unsubscribe (097), admin polish (098), web SIWA + onboarding wizard (099). Many of these are shipped, not roadmap.
- Underestimate the marketing/backend/admin surface. It's not "just the iOS app" β there's a real admin dashboard, real backend, real marketing site, real waitlist + drip emails, real public leaderboard. All in the ledger.
- Mistake roadmap items for unbuilt fantasies. Some
πitems have substantial design + spec already (Marketplace 042β050 has full feature definitions; B2B League 082β091 has the full sell). Read the row text. - Conflate Marketplace and B2B League. They're separate wedges. Marketplace = paid pickup + GM-built squads + Apple Pay escrow. B2B League = commissioner-organized leagues with seasons, stats, standings.
TL;DR
When asked about features or roadmap, read docs/Feature Ledger.md. When asked about release history, read docs/CHANGELOG.md. When asked about what's next, read the in-app Roadmap source (RoadmapView.swift) or the π rows in the ledger. This brain file is just the map β the territory is in those canonical docs.