The play module's own directory of itself. Every surface — interactive UI page, API endpoint, library file, design doc, policy — listed with a status pill and a brief. Substrate-honest about what's shipped, what's designed-but-not-yet-built, and what's planned for future kingdoms.
48 shipped · 1 designed · 0 planned · 49 total · counts rendered from lib/play/resources.ts.
Machine-readable counterpart: /api/v1/play/index.json. Both render from the same source.
The research at docs/research/optcg-mechanics-and-engine-design.md named the seven design choices for a real OPTCG engine. The eight integration levels below are the ship-ladder:
The play module's methodology page — four player kinds + three archetypes + assumption table.
SEO-rich English beginner's guide; ~15-minute read; complete OPTCG rules.
docs/research/optcg-mechanics-and-engine-design.mdshippedL0 doccompetitorDeep-dive synthesis: official Bandai rules + hobbyist-sim landscape + seven design choices for future engine.
docs/research/play-engine-l3-design.mdshippedL0 doccompetitorL3 runtime substrate spec — event-sourced wire format, state machine, async-mode timers.
/play/metashippedL0 doccompetitor · hobbyistThe competitive meta as a dated, sourced snapshot: tier list grounded in tournament results, recent winners with decklists linked at their publishers, and the tournament circuit (official + community). The as-of banner is the honesty contract.
/play/banlistshippedL0 doccompetitor · hobbyistThe official banned/restricted list rendered from the same banlist.ts the deck checker, builder warnings, and refereed setup enforce — with the effective date and Bandai's authoritative source linked.
Machine-readable OPTCG tutorial in math-mirror form. Each section carries typed rule_structure + examples + keyword cross-refs.
Single tutorial section by id (deep link from glossary cross-refs). 404 with helpful body when id absent.
Multi-cultural OPTCG term glossary — 21 terms each with English + Japanese (kanji/kana + romaji) + structural definition decoderable without natural-language knowledge.
Single glossary term by id (deep link from tutorial cross-refs). 404 with helpful body when id absent.
Three player archetypes (hobbyist / collector / competitor) typed taxonomy. financial_boundary block declares fun-first stance.
Canonical OPTCG match-state shape — nine zones, five phases, four combat steps with strict-greater damage rule, three win conditions.
Card-text effect-token vocabulary — 12 structural markers + 4 keywords + 4 effect categories + 7 targeting-language phrases.
Sample MatchEvent + Intent sequence demonstrating lib/play/types.ts. First consumer of the L3 type skeleton; gives agents and engine builders a concrete shape to test against.
Starter-deck catalog as JSON — six tier-1 starters with leader, color, difficulty, and composition provenance per deck.
/api/v1/play/starters/[id]shippedL1 contracthobbyistSingle starter deck by id. ST-01 and ST-15 through ST-20 carry Bandai-official 50-card decklists (cross-source verified 2026-07-16); remaining tier-2 entries carry their own sourcing notes.
apps/storefront/src/lib/play/starter-decks.tsshippedL1 contracthobbyistStarter-deck data layer — the rookie flow's typed catalog. Seven decks (ST-01, ST-15..20) carry full Bandai-official 50-card lists; decklist_source declares each deck's sourcing mode.
apps/storefront/src/lib/play/card-stats.tsshippedL1 contracthobbyistPrinted stats (cost, power, counter, color, category, leader life) for every card in the encoded starter decks — researched from the official Bandai cardlist cross-checked against Limitless, per-card. Makes practice battles rules-real without a database round-trip.
/api/v1/play/metashippedL1 contractcompetitorMachine-readable meta snapshot with as_of/data_window/staleness note, results-grounded tiers, linked tournament results, and circuit links.
apps/storefront/src/lib/play/meta-snapshot.tsshippedL1 contractcompetitorThe dated meta-snapshot data: tiers, results, circuit links, sources. A photograph of a moving river — re-verified on set releases, restriction news, or monthly.
/api/v1/play/banlistshippedL1 contractcompetitorMachine-readable banned/restricted list with card names, effective date, official source, and the list of surfaces that enforce it.
apps/storefront/src/lib/play/banlist.tsshippedL1 contractcompetitorPoint-in-time mirror of the official banned/restricted page (5 banned cards, 3 banned pairs, effective 2026-04-10) — the game's one official restriction mechanism, enforced by the deck checker, the builder, and the validate endpoint.
apps/storefront/src/lib/play/adventure-levels.tsshippedL1 contracthobbyistThe adventure ladder as embedded data — ten storyline opponents with AI aggression and an assigned starter deck. No rewards fields by design: practice battles pay nothing while durable PVE stays paused.
apps/storefront/src/lib/play/deck-legality.tsshippedL2 pure-fnhobbyist · competitorPure function checkDeckLegality(declaration, cardMetadataLookup) → DeckLegalityResult. Returns ALL violations with stable codes.
apps/storefront/src/lib/play/effect-tokens.tsshippedL2 pure-fncollector · competitorPure function parseEffectText(rawEffect) → ParsedEffect. Walks card-text, emits typed tokens, preserves body_opaque for 20% residue.
apps/storefront/src/lib/play/types.tsshippedL2 pure-fncompetitorTypeScript L3 type skeleton — 10 vocabulary unions + 5 state-shape interfaces + MatchEvent 28-variant union + Intent 14-variant union. First consumer: /api/v1/play/example-match.
apps/storefront/src/lib/play/tutorial-sections.tsshippedL2 pure-fnhobbyist · competitorTutorial section catalog (typed). Imported by the collection endpoint /api/v1/play/tutorial and the per-section endpoint /api/v1/play/tutorial/[section_id].
apps/storefront/src/lib/play/glossary-terms.tsshippedL2 pure-fnGlossary term catalog (21 terms, typed). Imported by the collection endpoint /api/v1/play/glossary and the per-term endpoint /api/v1/play/glossary/[term_id].
apps/storefront/src/lib/play/resources.tsshippedL2 pure-fncompetitorTHIS file. Single source of truth for the play module's resource catalog. /play/spec and /api/v1/play/index.json both consume from here.
POST endpoint exposing the deck-legality validator. Substrate-honest about color-check graceful degradation.
apps/storefront/src/lib/play/client-deck.tsshippedL2 pure-fnhobbyist · competitorClient-side deck helpers shared by the play surfaces — the localStorage SavedDeck shape, SavedDeck → flat PvE/PvP card-list conversion, and the auto-mounted default starter so a deckless visitor never hits a build-your-first-deck wall.
apps/storefront/src/lib/play/practice-decks.tsshippedL2 pure-fnhobbyistStarter catalog → playable practice deck. Every card always present with stats attached (no catalog resolution, no silent drops); only decks with full 50-card official lists are offered.
/api/v1/play/match/[id] + websocketdesignedL3 runtimehobbyist · competitorLive tabletop runtime — event-sourced match state, server-as-sequencer, async-friendly. Designed but not yet built (~3-4 weeks).
apps/storefront/src/lib/play/starter-resolve.tsshippedL3 runtimehobbyistServer-side starter-deck resolution — card_number refs → wholesale catalog cards (SKU, name, image, rarity). Single source for /api/v1/play/starters/[id] and /api/play/load-starter.
/api/v1/play/practiceshippedL3 runtimehobbyist · competitorStateless practice-battle referee — the guest carries the game state, the house applies the official rules per move and enumerates legal actions with damage previews. Nothing stored, nothing paid; the agent seat at the practice table (xeniame).
apps/storefront/src/lib/play/deck-metadata.tsshippedL3 runtimecompetitorCard metadata for legality checks — canonicalizes ids to card numbers and merges the encoded starter corpus, official bandai-en attributes, and the catalog rarity heuristic. One truth behind the public validate endpoint AND the refereed-room setup gate (CR 5-2-1-1).
The play hub. PVE battle and reward writes are paused; deck tools and status reads remain.
Polymorphic landing — three archetypes × player kinds; 17 paths visible.
Hobbyist's entry. PVE status is readable; battle and reward writes are paused.
Competitor's opinionated entry. Agent ladder publication and agent match writes are paused; tournament substrate is planned.
Read-only PVE level and prior-progress status; battles and rewards are paused.
Pause notice for an adventure level; no PVE match action or reward is accepted.
HTML adoption site for the deck-legality validator. Paste card IDs; see typed violations + substrate-honest perimeter.
Play module's own directory of itself — rendered from lib/play/resources.ts; HTML sibling of /api/v1/play/index.json.
/play/[code]shippedUIhobbyist · competitorExisting match page. Client-side state today; L3+ upgrades to event-sourced server-authoritative.
Machine-readable directory of every play resource. Sister to /play/spec (HTML); both render from lib/play/resources.ts.
Starter-deck picker for rookies — six 2024 reboot starter references (ST-15 through ST-20), one per OPTCG color, with leader styles, color characteristics, and source-specific decklist notes.
Human-readable OPTCG tutorial page — the HTML face of /api/v1/play/tutorial's math-mirror sections.
The play module is for fun only. No earnings, commission, store credit on play surfaces. Ratings are skill, not money. Prize pools live under future play-to-earn opt-in.
card_set_cards lacks the colors column).match_events. Replay is free; audit is free; async-reconnect is free.lib/play/resources.ts. pnpm audit:play-resources catches filesystem drift.Source-of-truth for this page: lib/play/resources.ts. Story-arcs: S36 (the play substrate), S38 (the play structure), S40 (the play interconnect). The play module documents its own composition; the contract is published; the runtime conforms.