Enter the books you love.
Incorrect code. Try again.
Enter the books you love.
Updated: July 19, 2026 06:00 UTC • Phase 2 95% complete (274 tests passing); 16 campaign modules built (5,197 lines); 334 SRD monsters live; Lost Mine of Phandelver manifest ready; sessions data grown to 829KB
| Delivery Item | Status | Completion | Notes |
|---|---|---|---|
| AI DM Service (LLM orchestration + streaming) | β Built | 4 modules (1,319 lines): context-manager (251), dm-service (579), llm-provider (298), prompts (191). Mock/dev error handling improved (commit 1f35464). |
|
| Rule Engine (D&D 5e core) | β Built | 7 modules: combat, dice, stats, classes, races, character-sheet. Full 5e SRD coverage. Has test suite. | |
| Dice Service | β Built | 4 modules (899 lines): types, random, service, index. Test suite (207 tests, commit 73f04b1). Live 3D physics roller (diceroller2.js, 1005 lines - Three.js + Cannon.js with Godot-style settling). Replaced pre-recorded video approach. All 6 die types verified (327/327 logic tests passed). |
|
| Character Creation & Management | β Built | Model, service, portrait gen. Narrative onboarding flow. Portrait gen needs image API wired up. | |
| Scene Engine + Continuity Validator | β Built | Exit pressure ramps, completion tracking, 4-action system per spec. | |
| Web App (PWA) | β οΈ Partial | Vanilla HTML frontend (index.html 70.9KB + create.html 22KB). Dice roller UI + 3D physics (dice-roller.js 18.5KB). PWA manifest + service worker done. Not React/framework. | |
| Adventure Content (3 books) | β Built | Dracula (25 scenes), Frankenstein (25 scenes), Sherlock Holmes (25 scenes). Full narrative bug hunt completed - 101 bugs found, 75+ fixed across all 75 scenes. 4 review files on file. Commit ffacd7d. |
|
| TTS Voice Service | π¨ Building | tts-service.js (408 lines) + index.js (40 lines). TTS service code built. Needs API key and end-to-end test. | |
| Session Management + Message Router | β Built | Persistence + message routing working. | |
| Auth + API Server | β Built | Fastify server (1,017 lines), token auth, SSE streaming, WebSocket support. Error responses improved for dev/mock mode (commit 1f35464). |
|
| Phase 1 + Phase 2 Test Suites | β Built | 3 test suites (50KB total): phase1.test.js (19KB), phase2.test.js (12KB), dice.test.js (19KB, 207 tests). Commit 73f04b1. |
|
| Coin/XP Scoring Engine | π¨ Building | coin-engine module (428 lines). Core scoring logic built. Needs AI DM creativity assessment integration. | |
| Combat Manager | β Built | combat-manager.js (438 lines). Initiative, multi-foe encounters, action economy. Integrated with rule engine. | |
| Dynamic Difficulty | π¨ Building | dynamic-difficulty.js (370 lines). Rubber-band scaling logic built. Needs tuning with playtest data. | |
| Inventory System | π¨ Building | inventory.js (598 lines). Item tracking, equipment slots, combat effects. Needs Shoppe marketplace integration. |
| Delivery Item | Status | Completion | Notes |
|---|---|---|---|
| Hosting - Render.com | β Configured | render.yaml + Dockerfile ready. Deploy pending. | |
| Telegram Bot | βΈοΈ HELD | Bot built (9KB). READY to deploy. HELD - Lawman to greenlight beta roll-out. | |
| GitHub Repository | β Ready | PAT configured. Code ready to push. | |
| Image Generation Pipeline | π¨ Building | image-service.js (324), prompt-builder.js (203), index.js (47) - 574 lines total. Scaffold built. Needs provider API key and end-to-end test. | |
| Voice / TTS Infrastructure | π¨ Building | TTS service code built (tts-service.js 408, stt-service.js 218, index.js 43 β 669 lines total). Needs provider API key and end-to-end integration test. |
| Delivery Item | Status | Completion | Notes |
|---|---|---|---|
| End-to-End Smoke Test | π¨ In Progress | Partial: signup β NDA β questionnaire β character creation β Dracula Scene 1 all functional. Inventory init fixed (commit 475bc20). Error handling improved (commit 1f35464). Remaining: full adventure playthroughs, session rejoin, spectator mode. |
|
| Narrative Bug Hunting | β Complete | Full audit of all 3 adventures (75 scenes, 15 acts). 101 bugs found: 29 HIGH, 31 MEDIUM fixed. Exit labels, NPC tracking, item tracking, discovery texts, banned keywords all reviewed. 4 review files (787 lines). Commit ffacd7d. |
|
| Beta Signup + Token System | β Built | beta-tokens.json + auth/token-store.js all in place. Sessions data active (829KB). | |
| Telegram Beta Deployment | βΈοΈ HELD | Waiting for Lawman's go-ahead. Ask him when ready. |
Three empty directories remain between "code exists" and "playable beta":
src/image/ - Scaffold built (574 lines: image-service, prompt-builder, index). Needs provider API key to activate.src/frontend/ - Empty. Current web app is vanilla HTML, not the spec'd React framework.src/blockchain/ - Empty placeholder. Phase 3 blockchain integration (NFTs, $BINDING token).data/sessions.json - Active (829KB). Session data tracks live game sessions.Note: src/voice/ is no longer empty — voice services built (669 lines: TTS, STT, index). Needs API key to activate.
ffacd7d.Three distinct play modes, all powered by the same engine. The mode is selected at session creation and determines DM prompts, content source, and player experience.
| Delivery Item | Status | Completion | Notes |
|---|---|---|---|
| Campaign Session Manager | β Code Complete | src/campaign/index.js (480 lines). Mode field (adventure/campaign/digital_dm), lobby state, turnOrder, worldState, party state, campaign log. 274 tests passing. | |
| World Builder (procedural generation) | β Code Complete | src/campaign/world-builder.js (308 lines). Locations, NPCs, connections, quest hooks. Theme presets (gothic horror, sword coast, noir, wilderness). Weather/time system. | |
| Campaign DM Prompts | β Code Complete | src/campaign/campaign-prompts.js (162 lines). Open-ended DM prompts, structured response parsing for dice rolls, quest updates, NPC attitudes. | |
| Quest Engine | β Code Complete | src/campaign/quest-engine.js (168 lines). Quest creation, tracking, completion. Integrates with world builder and DM prompts. | |
| Monster Manual + Encounter Builder | β Code Complete | Monster manual (364 lines) + encounter builder (260 lines). 334 SRD5.1 creature stat blocks. CR-balanced encounter generation. Live on Monsters tab. | |
| Turn Manager (multiplayer) | β Code Complete | src/campaign/turn-manager.js (260 lines). Initiative + narrative-based turn order. Host/spectator roles. AFK auto-skip. Mode switching. | |
| NPC Engine + Loot Engine | β Code Complete | NPC engine (300 lines) + loot engine (350 lines). NPC personality/dialogue/memory/relationships. Treasure tables, magic items, shop inventories. | |
| Campaign Persistence + UI | π¨ Partial | Session persistence (280 lines): auto-save, manual save, campaign journal, CRUD. Lobby manager (391 lines) + whisper system (371 lines) + leveling (526 lines) + dungeon generator (622 lines). UI not started. |
The Binding is an AI-powered platform that transforms any book into a live, playable role-playing experience. Users select a book (Dracula, Treasure Island, Gone with the Wind — anything), create a character, and play through the story with an AI Dungeon Master that narrates, adjudicates rules, generates scene images, and speaks in character.
The platform runs cross-platform (mobile, tablet, desktop) and integrates deeply with the Paxeer blockchain for character ownership, a marketplace economy, and community-driven content creation.
The core insight: Every book ever written is an unplayed adventure. The Binding makes them playable.
The Binding is designed to be a flagship consumer application on the Paxeer network — the kind of product that brings mainstream users onto the chain without them needing to understand blockchain mechanics.
| Benefit | Details |
|---|---|
| New wallet creation | Every player who earns $BINDING needs a Paxeer wallet. Projected: 10,000–50,000 new wallets in Year 1. |
| On-chain activity | Character NFTs, $BINDING token, achievement badges, Shoppe marketplace trades, seasonal items — all on Paxeer. Consistent daily on-chain volume. |
| Gas fee revenue | NFT minting, $BINDING conversions, marketplace trades, metadata updates generate gas. Batched transactions keep it efficient. |
| USDC/PAX liquidity | Users purchase with PAX or swap to USDC for marketplace transactions. Drives DEX volume. |
| Ecosystem credibility | A polished, mainstream consumer app proves Paxeer can host production applications — not just DeFi. |
| Segment | Size | Why They Care |
|---|---|---|
| Tabletop RPG players | 50M+ globally | AI DM available 24/7, no scheduling, infinite content, real coin rewards |
| Book readers / BookTok | 200M+ active | “Play through your favorite book” — earn coins while you do it |
| Interactive fiction fans | 30M+ (growing 15% YoY) | AI-driven, every choice matters, replayable, competitive leaderboards |
| Casual mobile gamers | 2B+ globally | Low barrier, narrative-driven, session-based, earn real value |
| Crypto/Web3 curious | 50M+ active wallets | Earn $BINDING by playing, not buying. Meme coin with a real use case. |
| Product | What They Do | The Binding’s Advantage |
|---|---|---|
| AI Dungeon | Text-based AI adventure | No book content, no visuals, no voice, no rules engine, no blockchain, no coin economy, no replayability system |
| D&D Beyond | Digital D&D tools | Requires a human DM and a group. No AI narrative. No coin rewards. No adaptive difficulty. |
| Choice of Games | Interactive fiction | Scripted, not AI-driven. No replayability. No real value earned from play. |
| Replika / Character.ai | AI conversation | Not gameified. No rules, no dice, no progression, no coins, no competition. |
The Binding sits in white space — no existing product combines AI narration + game rules + visual generation + voice + book content + blockchain ownership + intelligence-rewarded coin economy + adaptive replayability + seasonal competition.
| Revenue Stream | Description | Model |
|---|---|---|
| Adventurer’s License | One-time unlock after 5-hour free trial | $1.99 |
| Guild Pass Subscription | Full library, all voices, exclusive cosmetics | $9.99/mo |
| Shoppe Marketplace | NFT item trading between players | Platform fee on each trade |
| Seasonal Cosmetics | Limited-edition items, dice sets, portraits | Direct purchase |
| Adventure Module Sales | Creator-authored adventures | Purchase + creator royalties on resale |
| $BINDING Economy | 0.01% of all revenue feeds the $BINDING liquidity pool | Drives token value for holders |
| Metric | Year 1 | Year 2 | Year 3 |
|---|---|---|---|
| Registered users | 50,000 | 200,000 | 750,000 |
| Paid users (Adventurer’s License) | 20,000 | 80,000 | 300,000 |
| Guild Pass subscribers | 5,000 | 25,000 | 100,000 |
| Monthly recurring revenue | $50,000 | $300,000 | $1,200,000 |
| Shoppe marketplace + cosmetics | $20K/mo | $100K/mo | $400K/mo |
| $BINDING pool contribution | $1K/mo | $5K/mo | $20K/mo |
| Total annual revenue | $840,000 | $4,800,000 | $19,200,000 |
| Asset | Contract Type | Details |
|---|---|---|
| $BINDING Token | ERC-20 | Platform meme coin. Only mintable through gameplay. Tier-weighted conversion from in-game coins. |
| Character NFTs | ERC-721 (dynamic) | Stats, level, equipment, portrait, achievements, tier badges. Updates as character evolves. |
| Guild Pass NFT | ERC-721 (dynamic) | Subscription token. Tiered: Adventurer → Hero → Legend → Mythic. |
| Shoppe Marketplace | Custom | Listings, purchases, royalties, escrow. NFT item trading between players. |
| Tier Badge NFTs | ERC-1155 (soulbound) | Non-transferable. Earned per adventure per season. Displayed on profile. |
| Achievement Badges | ERC-1155 (soulbound) | Non-transferable. Earned through gameplay milestones. |
| Seasonal Leaderboard | On-chain + off-chain | 6-month seasons. Top performers earn bonus $BINDING + exclusive badges. |
| Adventure Module NFTs | ERC-1155 | Purchasable content. Creator royalties on resale (5%). |
| Dice Set NFTs | ERC-1155 | Collectible cosmetic dice. Limited seasonal drops. |
| Shoppe Item NFTs | ERC-721 | Found treasures. Cosmetic + gameplay bonus + tradeable. Seasonal scarcity. |
The platform is designed around a “generous free, irresistible premium” philosophy. No paywalls. Players sign up free, get a 5-hour full-featured trial, then pay $1.99 to unlock permanently. A $9.99/mo Guild Pass subscription provides the full library, all voices, and exclusive cosmetics.
The coin and $BINDING economy creates a play-to-earn layer that doesn’t feel like crypto — players earn coins for playing well, convert them to $BINDING at tier-weighted rates, and spend them in The Shoppe. The only way to get $BINDING is to play. No ICO. No presale. No VC allocation. Just play.
Seasonal leaderboards, limited-edition Shoppe items, and tier badges create engagement loops that drive retention without predatory mechanics. All monetization layers are designed to feel like value, not gates.
| Phase | Goal | Timeline | Team Size |
|---|---|---|---|
| Phase 1 — Core Engine | One playable adventure end-to-end with coin scoring | 4–5 months | 2–3 engineers |
| Phase 2 — Full Experience + All Three Game Modes | Multi-adventure, voice, monetization, Shoppe, Storyline + Campaign + Digital DM | 3–4 months | 3–5 people |
| Phase 3 — Blockchain & Competition | $BINDING token, NFTs, marketplace, leaderboards, seasonal economy | 3–4 months | 4–5 people |
| Phase 4 — Scale | Creator tools, licensed IPs, advanced features | Ongoing (month 11+) | 5+ |
| TOTAL TO FULL LAUNCH | 10–13 months | 2–6 people |
| Deliverable | Effort | Details |
|---|---|---|
| AI DM service (LLM orchestration + streaming) | 4–6 weeks | Context management, 4-suggestion generation, scene narration, NPC dialogue, creative score assessment |
| Rule engine (D&D 5e core) | 3–4 weeks | Standard + Story Mode. Combat, skill checks, saving throws, leveling. Rubber-band difficulty scaling. |
| Coin/XP scoring engine | 2–3 weeks | Intelligence-weighted scoring, theoretical max per adventure, bell curve distribution, hybrid real-time + chapter-breakdown rewards |
| Dice service with animations | 2–3 weeks | 7 die types, 30+ videos, shake detection, fair random |
| Character creation & management | 2 weeks | Narrative onboarding, stats, inventory, portrait, player profile tracking (play style) |
| Adventure engine (scene graph) | 3–4 weeks | Scene navigation, quest tracking, journal, save/load, curated backbone structure |
| Web app (PWA) | 3–4 weeks | React frontend, responsive, WebSocket real-time sync, coin/tier display |
| 3 adventures: Dracula, Frankenstein, Holmes | 6–8 weeks | 75 curated scenes (25 each), NPC pools, encounters, Layer 1 backbone. Full narrative bug hunt - 101 bugs found, 75+ fixed. Commit ffacd7d. |
| Basic voice (1 DM voice) | 1 week | Single TTS voice, text NPCs |
| PHASE 1 TOTAL | 18–24 weeks | ~4–6 months |
Phase 1 Deliverable: Working PWA. User signs up, creates a character, plays through Dracula, Frankenstein, or Sherlock Holmes with AI DM, dice rolls, coin scoring, tier award, basic voice, and scene images. All 3 adventures have been narrative-audited end-to-end (101 bugs found and fixed). Player can see their coin breakdown and tier after each chapter.
| Deliverable | Effort | Details |
|---|---|---|
| All 6 DM voices + NPC voice differentiation | 2–3 weeks | 8–10 preset voice profiles, persistent NPC assignments |
| Player voice input (STT) | 1 week | Web Speech API + Whisper fallback |
| Image pipeline (pre-gen + real-time) | 3–4 weeks | Adventure art, real-time scene images, caching |
| Replayability engine (Layer 2 + 3) | 3–4 weeks | Procedural sub-plot generation, surface variation, adaptive player profiling |
| Storyline Mode — Quest + Explorer sub-modes | 3–4 weeks | Solo curated adventures. Story rails vs. sandbox with narrative gravity. Player chooses guided or open exploration within each adventure. |
| The Shoppe (basic) | 2–3 weeks | Item display, treasure drops, in-game coin purchasing, inventory management |
| Adventure journal + session recap | 2 weeks | Auto-generated journal, cinematic recap, play style summary |
| 5-hour trial + $1.99 payment | 2 weeks | Clock mechanics, crypto/fiat payment |
| 3 additional adventures (6 total) | 3–4 weeks | Treasure Island, Odyssey, Time Machine (Sherlock Holmes already built in Phase 1) |
| Mobile wrappers (Capacitor) | 2 weeks | iOS + Android, App Store prep |
| Campaign Mode — Multi-player session management | 2–3 weeks | Join codes, lobby, session rooms, player arrays. Sandbox in the book’s world. Extends Phase 1 abstractions. |
| Digital DM Mode — General-purpose AI DM | 3–4 weeks | Open-ended improvisation, on-the-fly encounters, world-building. No curated adventure required — the AI DM creates everything live. Extends adventure-mode AI DM from Phase 1. |
| Monster stat blocks + initiative | 2 weeks | Data layer for monster stats, initiative tracker, multi-foe combat (extends rule engine) |
| DM whisper system | 1 week | Private messages to individual players (message router already supports targets) |
| Theater of the mind | 1–2 weeks | Verbal spatial descriptions, no grid. Prompt engineering on existing AI DM. |
| Session persistence | 2 weeks | Save/resume across sessions. World state already at session level from Phase 1. |
| PHASE 2 TOTAL | 12–18 weeks | ~3–5 months |
| Deliverable | Effort | Details |
|---|---|---|
| $BINDING ERC-20 token | 3–4 weeks | Token contract, minting logic (gameplay-only mint source), tier-weighted conversion service, wallet integration |
| Seasonal leaderboard system | 3–4 weeks | 6-month seasons, leaderboard resets, seasonal coin budgets, top-performer bonus $BINDING distribution |
| Shoppe marketplace (full) | 4–5 weeks | NFT item listings, purchases, royalties, escrow, seasonal item rotation, lifetime tier discounts |
| $BINDING liquidity pool | 1–2 weeks | DEX integration on Paxeer, revenue-to-pool drip mechanism, deflationary curve implementation |
| Guild Pass subscription + NFT minting | 3–4 weeks | Dynamic NFT contract, tier progression |
| Character NFTs on Paxeer | 2–3 weeks | ERC-721, dynamic metadata, coin/tier data embedded |
| Tier badge + Achievement NFTs | 2 weeks | ERC-1155 soulbound. Per-adventure per-season tier badges. |
| Friend list + party multiplayer | 4–6 weeks | Real-time shared sessions, party chat |
| 15+ adventures total | Ongoing | Content pipeline scaling |
| PHASE 3 TOTAL | 16–22 weeks | ~4–5 months |
| Phase | Monthly Cost | Notes |
|---|---|---|
| Phase 1 (development) | $200–500 | API calls for testing, dev hosting |
| Phase 2 (beta, ~1K users) | $1,000–3,000 | LLM + image gen + TTS scaling |
| Phase 3 (launch, ~5K users) | $4,000–9,000 | Full infrastructure + blockchain deployment + $BINDING liquidity seeding |
| Phase 4 (growth, 50K+ users) | $15,000–40,000 | Auto-scaling, CDN, DEX liquidity |
| Total infrastructure to launch | ~$30K–$80K | Over 9–12 months |
| Role | Phase 1 | Phase 2 | Phase 3 |
|---|---|---|---|
| Full-stack engineer (lead) | 1 | 1 | 1 |
| Full-stack engineer | 0–1 | 1 | 1 |
| AI/ML engineer | 0–1 | 1 | 1 |
| Blockchain engineer | — | 0–1 | 1 |
| Designer | contract | 1 | 1 |
| Content/game designer | 0–1 | 0–1 | 1 |
| TOTAL | 2–3 | 3–5 | 4–6 |
| Component | Contract Type | Phase |
|---|---|---|
| $BINDING Token | ERC-20 (gameplay-only mint) | Phase 3 |
| Character NFTs | ERC-721 (dynamic metadata) | Phase 3 |
| Guild Pass NFT | ERC-721 (dynamic, tiered) | Phase 3 |
| Shoppe Marketplace | Custom (listings, escrow, royalties, seasonal rotation) | Phase 3 |
| Tier Badge NFTs | ERC-1155 (soulbound, per-adventure per-season) | Phase 3 |
| Achievement Badges | ERC-1155 (soulbound) | Phase 3 |
| Shoppe Item NFTs | ERC-721 (cosmetic + gameplay bonus + tradeable) | Phase 3 |
| Adventure Module NFTs | ERC-1155 | Phase 3 |
| Dice Set NFTs | ERC-1155 | Phase 3 |
| $BINDING Liquidity Pool | DEX pair on Paxeer | Phase 3 |
| All gameplay + coin scoring | Off-chain (events queue to blockchain async) | Phase 1+ |
| Time to full launch | 9–12 months |
| Infrastructure cost to launch | ~$30K–$80K |
| Team size at launch | 2–6 people |
| Year 1 projected revenue | $840,000 |
| Year 3 projected revenue | $19,200,000 |
| New Paxeer wallets (Year 1) | 10,000–50,000 |
| $BINDING mint source | Gameplay only (no ICO, no presale, no airdrop) |
| Season length | 6 months with leaderboard reset |
| Adventures at launch | 15+ |
Confirmed design decisions for The Binding's core gameplay systems. These represent the product vision as agreed between the founding team.
Every adventure has a theoretical maximum coin pool — a fixed number based on story length and difficulty. Coins are awarded based on how intelligently you play, not just whether you win.
| Design Element | Decision |
|---|---|
| Scoring method | Hybrid — real-time subtle notifications during play + full breakdown at end of each chapter |
| What earns coins | Intelligence-weighted: creativity, problem-solving, investigation, roleplay, combat efficiency |
| Distribution | Standard bell curve — only 0.01% of players ever max out a single adventure |
| Theoretical max | Fixed per adventure, based on story length + difficulty level |
| Post-chapter summary | “You earned 340/500 coins. Creative Problem Solving (+120), Investigation (+90), Combat (+80), Roleplay (+50)” |
The scoring rubric must be generous rather than stingy — better to reward too often than too rarely at launch. Players should understand what gets rewarded and learn to play better over time.
| Tier | Requirement | Expected Rarity |
|---|---|---|
| Bronze | Complete the adventure | ~95% of players |
| Silver | Earn 60%+ of max coins | ~60% of players |
| Gold | Earn 85%+ of max coins | ~15% of players |
| Platinum | Earn 95%+ of max coins AND finish in top 10% of completion time | ~1% of players |
Key design note: Speed requirement applies ONLY to Platinum tier. Platinum means you played near-perfectly AND efficiently. That’s mastery — the screenshot people share, the badge that makes someone say “how did you do that?”
Coins earned in any adventure are fungible — 1 Dracula coin = 1 Frankenstein coin = 1 Sherlock Holmes coin. Your lifetime balance carries across all adventures, The Shoppe, the meme coin exchange, and your player profile.
| Tier Earned | Conversion Rate | Example: 1,000 coins becomes |
|---|---|---|
| Bronze | 1x | 1.00 $BINDING |
| Silver | 1.5x | 1.50 $BINDING |
| Gold | 2.5x | 2.50 $BINDING |
| Platinum | 5x | 5.00 $BINDING |
| Lifetime Average Tier | Shoppe Discount |
|---|---|
| Bronze average | Full price |
| Silver average | 10% off |
| Gold average | 25% off |
| Platinum average | 40% off + access to exclusive items |
The tier-weighted conversion kills the exploit where someone creates 50 accounts and farms the easiest adventure on the lowest difficulty. Bronze conversion at 1x means that strategy generates almost nothing. The system rewards quality over quantity.
$BINDING is the platform’s meme coin. The only way to earn $BINDING is to play well in The Binding. No ICO. No presale. No airdrop farming. No VC allocation.
| Component | What Happens |
|---|---|
| New Adventures | 2–3 new books drop per season. New stories = new coin pools = fresh leaderboard |
| Season Leaderboard | Resets every 6 months. Top performers get bonus $BINDING + exclusive NFT badges |
| Coin Pool Budget | Each season has a defined minting budget. Controls inflation. |
| The Shoppe | Seasonal items rotate in and out. Creates scarcity and urgency. |
| Legacy Bonus | Players from earlier seasons get a permanent +% on all future conversions. Loyalty rewarded. |
| Era | Seasons | Theme | Economy |
|---|---|---|---|
| Era 1: Founders | S1–S5 | Build core community, 5 adventures, prove the model | Small coin pool, high value per coin. Best Legacy Bonus for early players |
| Era 2: Growth | S6–S15 | Scale to thousands of players, 20+ adventures, marketplace opens | Growing pool, $BINDING becomes tradeable, Shoppe revenue kicks in |
| Era 3: Maturity | S16–S30 | Peak player count, competitive seasons, multiplayer adventures | Stable pool, inflation managed by seasonal caps |
| Era 4: Legacy | S31–S40 | The game is a classic, community-driven content, potential DAO governance | Pool stabilizes, long-term holders rewarded |
| Era | Revenue to $BINDING Pool | Why |
|---|---|---|
| Era 1 | 0.05% | Higher % to bootstrap value. Early coins need to feel worth earning. |
| Era 2 | 0.03% | More players = more total revenue, so % can drop while absolute $ grows. |
| Era 3 | 0.01% | Stable, predictable, sustainable. |
| Era 4 | 0.005% | Pool is self-sustaining, revenue goes to operations + community. |
Control Mechanisms: The season structure gives three powerful levers to prevent the coin economy from spiraling: (1) Seasonal coin budgets cap $BINDING minting per season. (2) Leaderboard resets every 6 months prevent permanent accumulation spirals. (3) Era transitions every ~2.5 years are built-in checkpoints to adjust conversion rates, revenue %, and minting caps.
The same adventure should feel different every time you play it. The story beats stay fixed, but everything between the beats gets reshuffled.
| Layer | What Changes | Quality Control |
|---|---|---|
| Layer 1: Curated Backbone | 20–30 hand-crafted scenes per adventure. Dependency graph. Tested. | Guaranteed quality — the skeleton never breaks. |
| Layer 2: Procedural Connective Tissue | AI-generated transitions, side encounters, sub-plots, NPC moments. | Starts with curated templates, learns player style, shifts toward free generation over time. |
| Layer 3: Surface Variation | NPC personality, dialogue flavor, item descriptions, environmental details. | Easy for LLMs to do well. Always different, never changes structure. |
The AI DM builds a Player Profile as you play — tracking combat affinity, diplomacy, investigation, creativity, risk tolerance, and compassion. It uses this profile to:
The adaptation is invisible. Players should think “this adventure is really varied,” not “the game is testing me.”
At the end of each adventure, players see a summary: “Your play style: Investigator. The game noticed you prefer exploring before fighting.” An optional deep profile view shows full style breakdown for hardcore players.
Players find treasures during adventures — items, artifacts, relics. These items have three properties:
| Property | Details |
|---|---|
| Cosmetic | Displays on your player profile. Shows off your collection. |
| Gameplay Bonus | Small cross-adventure utility. Found Dracula’s Signet Ring? Small bonus in vampire-themed adventures. Meaningful but not game-breaking. |
| Tradeable NFT | Real on-chain asset. Sell to other players in The Shoppe marketplace. The Binding takes a small fee on each trade. |
Anti-pay-to-win guardrail: No item should be powerful enough that buying it replaces playing well. The Shoppe rewards collection and curation, not spending power.
Seasonal scarcity: Items rotate in and out each season. If you were there, you got it. If not, there’s next season.
The difficulty rubber-bands around the player’s level with deliberate power windows — periods where you’re overpowered followed by a challenge spike.
| Fight Type | Frequency | Purpose |
|---|---|---|
| Standard challenge | 70% of fights | Scales closely to your level. Constant engagement. |
| Power window | 20% of fights | Below your level. You feel like a badass. Satisfying. |
| Challenge spike | 10% of fights | Above your level. You need to think creatively. Humbling. |
The AI DM controls the pacing — it knows when to let you feel powerful and when to humble you. This is narrative difficulty design, not just math.
Your character level determines the adventure’s baseline difficulty before you start. A Level 1 player gets an easier Dracula than a Level 10 player — same story, same beats, but enemies scaled, puzzles harder, DCs higher.
The difficulty is invisible. No numbers, no sliders. The AI DM narratively explains why this version is harder: “Word has reached you that this particular incarnation of the Count has grown more cunning. His servants are more numerous, his traps more elaborate.”
Difficulty is story, not a number. A player who thinks “this Dracula is really hard this time” is more engaged than one who thinks “the game scaled enemies to my level.”
The Binding will expand from book-based single-player adventures into a full AI Dungeon Master replacement for standard D&D 5e play. The same engine powers all three modes.
| Mode | Description | Players | Content |
|---|---|---|---|
| π Storyline Mode | Follow the book (Dracula, Frankenstein, Holmes). Curated scenes with exit pressure ramps keep you in the canonical narrative. | 1 (single player) | Pre-written scene graph + adaptive replayability |
| βοΈ Campaign Mode | Sandbox in the book’s world. Explore freely, pursue side quests, build NPC relationships. The AI DM improvises within the book’s setting. | 1–6 | Book world state (characters, locations, lore) + AI-generated content |
| π² Digital DM Mode | Full Dungeon Master. Completely open-ended. The AI creates the world, NPCs, quests, and combat encounters from scratch. | 1–6 | AI-generated from theme preset (gothic horror, sword coast, noir, wilderness, custom) |
The multi-player D&D mode is essentially The Binding without the book constraint. Same engine, same AI DM, same rules — just open-ended instead of curated. This doubles the addressable market: “play through books” becomes “your personal D&D DM that’s always available.”
Five architectural patterns are baked into Phase 1 so that Phase 2 (all three game modes) is purely additive — no rewrites. Two weeks of architectural discipline in Phase 1 saves 3–4 months of rewriting in Phase 2.
| Pattern | Phase 1 (Now) | Phase 2 (All Three Modes) | Savings |
|---|---|---|---|
| Session as container | Session holds a player array (length 1) | Add players to the array (length 2–6) | 3–4 weeks saved |
| Player-tagged actions | Every action includes playerId | AI DM processes actions from multiple player IDs | 4–6 weeks saved |
| Shared + private state | World state + private state exist (all visible to 1 player) | Router filters private state per player | 2–3 weeks saved |
| Message router | DmMessage has targets array (length 1) | Router broadcasts shared, whispers private | 2–3 weeks saved |
| Player-agnostic rules | Rule engine accepts arrays of actors | Works for 1 player or 6, zero changes | 0 (already done) |
Net result: Phase 1 takes ~2 extra weeks to build with these abstractions. Phase 2 saves 11–16 weeks of rewriting. The ROI is 5:1 — the best investment in the entire project.
Decided with Lawman: 2026-07-11
Core Principle: The DM never advances a scene unless the player chooses to move on OR the story forces it. Scenes have real weight — the player should feel like they’re in a place, not scrolling past it.
Every scene has a manifest — a checklist of discoverable content:
[EXPLORED: item1, item2] — what the player just discovered| Completion | Pressure Level | What the Player Experiences |
|---|---|---|
| 0–25% | Background | Exit is one of 4 actions, not highlighted. Rich scene descriptions. |
| 25–50% | Gentle nudge | DM weaves in environmental cues. “The coachman coughs outside.” |
| 50–75% | Strong push | World closes in. “The candles burn lower. The coachman calls — he won’t wait.” |
| 75–100% | Story-driven | Hard exit after 4 turns. “The innkeeper locks the door. Time to go.” |
This replaces the old approach where the DM just cycled through canned responses and forced scene transitions.
Decided: 2026-07-11. Phase 2 next, Phase 3 after testing Phase 2 with users.
~2 hours of work. Natural fit for the product.
| Component | Details |
|---|---|
| Session model | Already supports players array (built from Day 1) |
| Player roles | Need: role field on player (host vs spectator) |
| Spectator UI | Need: spectator suggestion panel (visible only to spectators) |
| Host UI | Host sees suggestions as a “community hints” overlay |
| Messaging | Spectators get their own SSE stream with spectator-only messages |
Why this first: Books have one protagonist. This respects the source material and makes the experience feel intentional rather than chaotic.
Needs more design work. Rule engine already supports this.
| Component | Details |
|---|---|
| Character creation | Need: flow for each player joining |
| Turn management | Need: whose turn is it? |
| Information sharing | Need: shared vs private info (whisper system already in MessageRouter) |
| Multi-participant combat | Need: combat encounters with multiple participants |
| Co-op adventures | Need: content written for 2–6 players |
Why later: More complex, more engaging, but needs significant design work on how turns work in a narrative context.
A single high-quality illustration to serve as the logo/key art for "The Binding" β an AI-powered RPG platform where players play through classic books.
An old wooden desk. Dark, warm, candlelit atmosphere β like a scholar's study at night. Everything has an aged, literary, slightly worn feel. Think antique wood grain, warm shadows, rich amber tones.
A thick, ornate leather-bound book lying flat on its back (cover facing up, spine away from viewer). The book's binding is prominently visible β the spine, the stitching, the leather texture of the binding running along the edge should be a focal point. This is a heavy, old, well-made book β the kind that pulls you in.
On the book's cover, in elegant but clearly legible script/calligraphy: "The Binding"
A tall, lit candle. This is the primary light source. Warm golden light spilling across the book and the desk surface, casting soft shadows. The candle should feel old β maybe a brass or iron candleholder, partially melted wax.
A paper human figure in a Japanese origami/kirigami paper-fold style. This figure represents the player β a person made of folded paper, standing beside the desk, facing the book's binding. They're looking at it, about to open it. The character should feel like a paper craft creation with visible folds, creases, and geometric cuts β NOT a flat silhouette, but a three-dimensional paper-fold figure. Think Japanese kirigami meets paper doll.
Four paper-craft objects rising from the pages of the open book, like the imagination inside the book is coming to life. All four should be in the same origami/paper-fold style as the human figure. They should be staggered at different heights, drifting upward:
1. A paper castle β medieval towers, battlements, all made of folded paper
2. A paper pirate ship β sails, hull, rigging, all in paper folds
3. A paper dragon β wings outstretched, tail curled, made of geometric paper folds
4. A paper spaceship β a sleek hybrid design combining swept-back fighter wings with elongated engine nacelles and a central fuselage. Should evoke "fast starfighter meets deep-space explorer" β distinctly original, not any recognizable franchise ship. All in paper-fold style.
This is for a startup game platform. Looking for quality concept art / illustration work. Happy to pay fair rates for good work. Expected range: $100-300 depending on artist experience and revision rounds.
Last Updated: July 17, 2026
Status: Catalog β Content Pending Integration
Each adventure has a Level Range that indicates what character levels it's designed for.
Players will see this in the adventure selection dropdown so they can pick content appropriate for their character.
| # | Adventure | Source | Level Range | Status | URL |
|---|---|---|---|---|---|
| 1 | **Lost Mine of Phandelver** | WotC Starter Set | Levels 1β5 | π Manifest Ready | [Starter Set] |
| 2 | **Death House** | Curse of Strahd Intro | Levels 1β3 | βͺ Pending | https://media.wizards.com/2016/downloads/DND/Curse%20of%20Strahd%20Introductory%20Adventure.pdf |
| 3 | **Frozen Sick** | Explorer's Guide to Wildemount | Level 1 | βͺ Pending | [WotC] |
| 4 | **Prisoner 13** | Keys from the Golden Vault | Level 4 | βͺ Pending | [WotC] |
| 5 | **Dues for the Dead** | DDEX14 (Adventurers League) | Levels 1β4 | βͺ Pending | https://media.wizards.com/2014/downloads/dnd/DDEX14_DuesfortheDead.pdf |
| # | Adventure | Source | Level Range | Status | URL |
|---|---|---|---|---|---|
| 6 | **A Most Potent Brew** | Winghorn Press | Level 1 | βͺ Pending | https://winghornpress.com/adventures/a-most-potent-brew/ |
| 7 | **A Wild Sheep Chase** | Winghorn Press | Levels 4β5 | βͺ Pending | https://winghornpress.com/adventures/a-wild-sheep-chase |
| 8 | **Moon Over Graymoor** | DMs Guild | Levels 1β3 | βͺ Pending | https://www.dmsguild.com/en/product/235521/moon-over-graymoor |
| 9 | **Secrets of the Sunken Temple** | Kassoon | Levels 1β4 | βͺ Pending | https://www.kassoon.com/dnd/5e/free-modules/ |
| 10 | **Army of the Damned** | Google Drive | Levels 1β3 | βͺ Pending | https://drive.google.com/drive/folders/1MyAVOpmtQsTEZbhckQKcOIjuOMUg2SzV |
| 11 | **Challenge of the Frog Idol** | Dyson Logos | Levels 1β2 | βͺ Pending | https://rpgcharacters.files.wordpress.com/2011/06/dyson-logos-challenge-of-the-frog-idol.pdf |
| 12 | **Clam Island** | Homebrewery | Levels 1β4 | βͺ Pending | https://homebrewery.naturalcrit.com/share/By3s5Uqqf |
| Priority | Adventure | Reason |
|---|---|---|
| 1 | Lost Mine of Phandelver | Full manifest ready, iconic intro adventure, levels 1β5 |
| 2 | Death House | Free WotC PDF, gothic horror (matches game theme), levels 1β3 |
| 3 | A Most Potent Brew | Free, simple one-shot, great for onboarding, level 1 |
| 4 | Frozen Sick | Free, mystery-focused, level 1 |
| 5 | Dues for the Dead | Free WotC PDF, dungeon crawl, levels 1β4 |
"Adventure Name (Levels XβY)" or "Adventure Name (Level X)"Type: Linear dungeon crawl / tutorial
Goal: Rescue Sildar Hallwinter and Gundren Rockseyer from goblin captivity
| Scene ID | Location | Summary | Encounters |
|---|---|---|---|
| `1.0` | **Triboar Trail (Ambush)** | Party finds two dead horses on the road β a goblin ambush. | 4 Goblins (CR 1/4 each) |
| `1.1` | **Cragmaw Hideout β Cave Mouth** | Goblin lair entrance in a cliff face along the Triboar Trail. Stream flows out. | 2 Goblin sentries |
| `1.2` | **Cragmaw Hideout β Kennel** | Wolves kept chained as guard animals. Can be befriended (DC 15 Animal Handling). | 3 Wolves |
| `1.3` | **Cragmaw Hideout β Goblin Blind** | Elevated ledge with goblins who attack from above, flooding the passage below. | 4 Goblins, 1 Goblin Boss |
| `1.4` | **Twin Pools Cave** | Water-filled chamber. Hidden passage leads deeper. | Environmental (drowning risk) |
| `1.5` | **Cragmaw Hideout β Klarg's Lair** | Bugbear boss chamber. Contains Sildar's gear and a map to Cragmaw Castle. | Klarg (Bugbear, CR 1), 1 Wolf, 2 Goblins, 1 Goblin Boss |
| `1.6` | **Cragmaw Hideout β Prisoner Area** | Sildar Hallwinter is held here (if not rescued earlier). Gundren has been taken to Cragmaw Castle. | 1-2 Goblins |
Key Items Found: Gundren's map to Wave Echo Cave, Sildar's equipment, Klarg's stash
Quest Trigger: Sildar asks party to find Gundren at Cragmaw Castle; mentions he was heading to Phandalin
Level Up: Characters reach Level 2 after this act
Type: Town hub / social / quest-gathering
Goal: Explore Phandalin, learn about the region's problems, gather quests
| Scene ID | Location | Summary | NPCs |
|---|---|---|---|
| `2.0` | **Phandalin β Town Square** | Small frontier town. ~50 buildings, pop ~100. Mining settlement rebuilding after dragon cult raids. | Various townsfolk |
| `2.1` | **Barthen's Provisions** | General store. Deliver Gundren's supplies for 50gp reward. | Elmar Barthen |
| `2.2` | **Lionshield Coster** | Trading post with a stolen goods subplot. | Linene Liadon |
| `2.3` | **Stonehill Inn** | Town tavern and social hub. Rumors, gossip, quest hooks. | Toblen Stonehill, Trilena, Pip |
| `2.4` | **Townmaster's Hall** | Town leadership. Harbin Wester is cowardly and corrupt-leaning. | Harbin Wester (Townmaster) |
| `2.5` | **Shrine of Luck** | Temple of Tymora. Healing services available. | Sister Garaele |
| `2.6` | **Alderleaf Farm** | Halfling farm on town edge. Key ally location. | Qelline Alderleaf, Carp Alderleaf |
| `2.7` | **The Sleeping Giant** | Rough tavern, Redbrand hangout. Potential combat trigger. | Redbrand Ruffians (3-4) |
| `2.8` | **Tresendar Manor (Ruins)** | Ruined manor on hill above town. Secret entrance to Redbrand Hideout. | β |
| `2.9` | **Redbrand Hideout β Cellar Entrance** | Secret entrance through manor ruins or via Tressendar crypts. | β |
Quests GATHERED in Phandalin (all feed into Act III and beyond):
| Quest | Giver | Target | Reward |
|---|---|---|---|
| Find Gundren Rockseyer | Sildar Hallwinter | Cragmaw Castle | 500gp |
| Clear the Redbrands | Sildar Hallwinter / multiple | Redbrand Hideout | Town safety |
| Sister Garaele's Quest | Sister Garaele | Agatha's Lair (ask a banshee a question) | Potion of Healing + future favor |
| The Banshee's Question | Sister Garaele | Find Bowgentle's spellbook location | β |
| Qelline's Request | Qelline Alderleaf | Recon Redbrand Hideout via her son Carp's knowledge | Safe passage |
| Townmaster's Quest | Harbin Wester | Orclands β clear orcs from Wyvern Tor | 100gp |
| Halia's Request | Halia Thornton | Capture Glasstaff alive | 100gp + Zhentarim favor |
| Reidoth's Location | Various | Find the druid Reidoth in Thundertree | Information on Cragmaw Castle |
Type: Dungeon crawl
Goal: Defeat the Redbrand ruffians and their leader Glasstaff (Iarno Albrek)
| Scene ID | Location | Summary | Encounters |
|---|---|---|---|
| `2.10` | **Redbrand Hideout β Cellar** | Dark cellar beneath Tresendar Manor. Storage and guard post. | 3 Redbrand Ruffians |
| `2.11` | **Redbrand Hideout β Common Room** | Main gathering area for Redbrands. | 3 Redbrand Ruffians, 1 Bugbear (Droop β enslaved, potential ally) |
| `2.12` | **Redbrand Hideout β Crevasse** | Natural chasm with bridge. Trap: pit with spikes below. | Environmental trap (DC 10 Dex save, 2d6 piercing) |
| `2.13` | **Redbrand Hideout β Slave Pens** | Prisoner cells. Mirna Dendrar and her children are held here. | 1 Redbrand Ruffian |
| `2.14` | **Redbrand Hideout β Barracks** | Redbrand sleeping quarters. | 3 Redbrand Ruffians (possibly sleeping) |
| `2.15` | **Redbrand Hideout β Nothic's Lair** | Crevasse area inhabited by a Nothic β a corrupted aberration. Can be bargained with. | Nothic (CR 2) |
| `2.16` | **Redbrand Hideout β Glasstaff's Quarters** | Iarno Albrek's study. Contains evidence of Black Spider correspondence, staff of defense, and a map. | Glasstaff / Iarno Albrek (Evil Mage, CR 2) + Familiar |
| `2.17` | **Redbrand Hideout β Secret Tunnel Exit** | Escape route to the woods outside town. Glasstaff may flee here. | β |
Key Items: Staff of Defense, Black Spider's letters (reveals Nezznar's involvement), Tresendar Manor map
Critical Intel: Letters reveal the Black Spider is looking for Wave Echo Cave and has agents in the region
Level Up: Characters reach Level 3 after clearing the hideout
Type: Open-world exploration β multiple locations, player-driven order
Goal: Find Cragmaw Castle (to rescue Gundren) and/or find Wave Echo Cave
The party has multiple leads pointing to different wilderness locations. They can tackle these in any order.
#### Location A: Triboar Trail Encounters
Random and scripted wilderness encounters while traveling. Bandits, orcs, owlbears, etc.
#### Location B: Old Owl Road / Conyberry β Agatha's Lair
| Scene ID | Location | Summary | Encounters |
|---|---|---|---|
| `3.0` | **Conyberry Ruins** | Abandoned village. Path to Agatha's Lair. | β |
| `3.1` | **Agatha's Lair** | Ghost of a banshee. Sister Garaele wants the party to ask her a question about Bowgentle's spellbook. Must offer a gift (comb). | Agatha (Banshee, CR 4 β social encounter, not combat unless provoked) |
#### Location C: Thundertree (Dragon Cult / Druid)
| Scene ID | Location | Summary | Encounters |
|---|---|---|---|
| `3.2` | **Thundertree β Ruined Village** | Ash-ravaged village destroyed by Mt. Hotenow eruption. Now infested with blights and a dragon. | Twig Blights, Ash Zombies |
| `3.3` | **Thundertree β Dragon's Tower** | Ruined tower occupied by a young green dragon. | **Venomfang** (Young Green Dragon, CR 8 β potentially lethal, can be negotiated with or fled from) |
| `3.4` | **Thundertree β Druid's Cottage** | Reidoth the druid lives here, hiding from the dragon. Knows Cragmaw Castle's location. | Reidoth (Druid NPC) |
| `3.5` | **Thundertree β Cult of the Dragon Hideout** | Dragon cultists who worship Venomfang. | 4 Cultists, Dragonclaw (CR 1) |
| `3.6` | **Thundertree β Ruined Manor** | Contains ash zombies and a trapped chest. | 3 Ash Zombies |
Quest Resolution: Reidoth tells the party exactly where Cragmaw Castle is.
#### Location D: Wyvern Tor (Orc Quest)
| Scene ID | Location | Summary | Encounters |
|---|---|---|---|
| `3.7` | **Wyvern Tor β Orc Camp** | Mountain outpost occupied by orcs raiding the region. Harbin Wester's quest target. | 1 Ogre, 6 Orcs (CR 1/2 each) |
#### Location E: Cragmaw Castle (CRITICAL PATH)
| Scene ID | Location | Summary | Encounters |
|---|---|---|---|
| `3.8` | **Cragmaw Castle β Approach** | Ruined castle in Neverwinter Wood. Goblin lair. Multiple entry points. | Goblin sentries |
| `3.9` | **Cragmaw Castle β Main Entry / Great Hall** | Collapsed main hall. Goblin guards. | 1 Goblin, 1 Hobgoblin |
| `3.10` | **Cragmaw Castle β Barracks** | Hobgoblin and goblin quarters. | 1 Hobgoblin, 3 Goblins |
| `3.11` | **Cragmaw Castle β Dining Hall** | Bugbear feast hall. | 1 Bugbear, 1 Wolf, 2 Goblins |
| `3.12` | **Cragmaw Castle β Priest's Chamber** | Evil priest of Lloth. | **Yegg** (Goblin priest) or Doppleganger in disguise |
| `3.13` | **Cragmaw Castle β King Grol's Chamber** | The bugbear king's throne room. Gundren is here, badly beaten. The doppelganger Vyerith may be present. | **King Grol** (Bugbear Chief, CR 3), **Vyerith** (Doppelganger, CR 3), 1 Wolf |
| `3.14` | **Cragmaw Castle β Treasure Room** | Hidden stash of the Cragmaw tribe. | Loot: gold, gems, + Gundren's map to Wave Echo Cave |
Critical Resolution: Rescue Gundren Rockseyer alive. Recover the map to Wave Echo Cave.
Level Up: Characters reach Level 4 after Cragmaw Castle
Type: Mega-dungeon crawl β the climax
Goal: Find the Forge of Spells, defeat the Black Spider, and claim (or destroy) the Forge
| Scene ID | Location | Summary | Encounters |
|---|---|---|---|
| `4.0` | **Wave Echo Cave β Entrance** | Hidden cave entrance in the Sword Mountains. Sound of crashing waves echoes within (ancient magic). | Environmental: darkness, echoing sounds |
| `4.1` | **Wave Echo Cave β Mine Tunnels** | Old dwarven mine shafts. Partially flooded. | 6 Giant Bats |
| `4.2` | **Wave Echo Cave β Fungi Cavern** | Cave filled with strange glowing fungi. | 10 Stirges, poisonous gas (DC 12 Con save) |
| `4.3` | **Wave Echo Cave β Old Entrance** | Secondary cave entrance. Overgrown. | 1 Ochre Jelly |
| `4.4` | **Wave Echo Cave β South Passages** | Winding tunnels with undead. | 8 Zombie (dwarven miners, risen) |
| `4.5` | **Wave Echo Cave β Great Cavern** | Massive underground lake. The "wave echo" β magical resonance fills the air. | 2 Ochre Jellies, environmental hazard |
| `4.6` | **Wave Echo Cave β North Passages** | Tunnels leading toward the Forge. | 12 Skeletons (dwarven warriors) |
| `4.7` | **Wave Echo Cave β Black Spider's Camp** | Nezznar's forward operating base. His drow followers and bugbear guards. | 2 Giant Spiders, 4 Bugbears |
| `4.8` | **Wave Echo Cave β The Forge of Spells** | The legendary magical forge. Still radiates powerful enchantment magic. Weapons/armor touched by its light gain +1. | **Spectator** (CR 3 β a beholder-kin bound to guard the Forge, can be negotiated with) |
| `4.9` | **Wave Echo Cave β The Black Spider's Lair** | Final boss chamber. Nezznar has been trying to breach the Forge's guardian. | **Nezznar the Black Spider** (Drow Wizard, CR 2 β but with tactical play, lair advantage, and Giant Spider allies he's more dangerous), 2 Giant Spiders, potentially 4 Giant Spiders as reinforcements |
Key Items: Forge of Spells (can enchant weapons/armor permanently), Wave Echo Cave treasure hoard (7,000+ gp in gems and art objects)
Resolution: Defeat the Black Spider. The Forge of Spells can be claimed, sealed, or destroyed β major narrative branch.
| Level | Reached After | Milestone |
|---|---|---|
| **1** | Adventure start | Characters begin at Level 1 |
| **2** | Act I complete | Clearing Cragmaw Hideout |
| **3** | Act II-B complete | Clearing Redbrand Hideout |
| **4** | Act III complete | Rescuing Gundren at Cragmaw Castle |
| **5** | Act IV complete | Clearing Wave Echo Cave / defeating Black Spider |
| NPC | Role | Location | Quest | Notes |
|---|---|---|---|---|
| **Gundren Rockseyer** | Dwarf merchant, employer | Captured β Cragmaw Castle β rescued | Main quest hook | Has the map to Wave Echo Cave |
| **Sildar Hallwinter** | Human warrior, Lord's Alliance agent | Cragmaw Hideout β Phandalin | Find Gundren, clear Redbrands | Gruff but honorable; rewards party |
| **Qelline Alderleaf** | Halfling farmer | Alderleaf Farm, Phandalin | Recon Redbrand Hideout | Knows secret entrance; her son Carp saw it |
| **Sister Garaele** | Elf cleric of Tymora | Shrine of Luck, Phandalin | Find Agatha, ask about spellbook | Provides healing services |
| **Reidoth** | Human druid | Thundertree | None (information source) | Knows Cragmaw Castle location; can also help with Wave Echo Cave |
| **Halia Thornton** | Human, Zhentarim agent | Phandalin Townmaster's Hall | Capture Glasstaff alive | Zhentarim faction; morally grey quest giver |
| **Elmar Barthen** | Human shopkeeper | Barthen's Provisions | Deliver supplies | Simple merchant; pays 50gp |
| **Nundro Rockseyer** | Dwarf, Gundren's brother | Wave Echo Cave (prisoner) | β | Found alive in the cave; can share lore about the Forge |
| **Droop** | Goblin slave | Redbrand Hideout | β | Enslaved by Redbrands; can become party's guide/ally |
| NPC | Role | Location | CR | Notes |
|---|---|---|---|---|
| **Nezznar the Black Spider** | Drow wizard, main villain | Wave Echo Cave | 2 (but tactically dangerous) | Seeks Forge of Spells; commands drow, spiders, bugbears |
| **Glasstaff / Iarno Albrek** | Human mage, Redbrand leader | Redbrand Hideout | 2 | Sildar's missing companion; defected to Black Spider; has Staff of Defense |
| **King Grol** | Bugbear chief | Cragmaw Castle | 3 | Holds Gundren hostage; commands the Cragmaw tribe |
| **Klarg** | Bugbear | Cragmaw Hideout | 1 | Sub-boss; runs the goblin raiding party |
| **Venomfang** | Young green dragon | Thundertree | 8 | Optional but memorable; territorial, not directly tied to Black Spider |
| **Agatha** | Banshee | Conyberry | 4 | Social encounter; ancient elf spirit; knows secrets |
| **Vyerith** | Doppelganger | Cragmaw Castle | 3 | Shapechanger working for the Black Spider; can impersonate NPCs |
| **Halia Thornton** | Zhentarim agent | Phandalin | β | Potential antagonist depending on player choices |
| Faction | Representative | Goal |
|---|---|---|
| **Lords' Alliance** | Sildar Hallwinter | Restore order to Phandalin region |
| **Zhentarim** | Halia Thornton | Gain influence in Phandalin; control the Forge |
| **Harpers** | Sister Garaele (loosely) | Gather intelligence; find lost magical knowledge |
| **Cult of the Dragon** | Dragon cultists at Thundertree | Recruit Venomfang; tangential to main plot |
`
START β Ambush on Triboar Trail
β Cragmaw Hideout (rescue Sildar, learn Gundren taken to Cragmaw Castle)
β Travel to Phandalin (gather information and quests)
β Redbrand Hideout (defeat Glasstaff, learn about Black Spider)
β Find Cragmaw Castle (via Reidoth in Thundertree, or other leads)
β Cragmaw Castle (rescue Gundren, recover map)
β Wave Echo Cave (defeat Black Spider, claim Forge of Spells)
β END
`
| Quest | Giver | Location | Reward | XP |
|---|---|---|---|---|
| **Sister Garaele's Errand** | Sister Garaele | Agatha's Lair | Potion of Healing + future favor | 300 XP |
| **Orc Trouble** | Harbin Wester | Wyvern Tor | 100 gp | 350 XP |
| **The Dragon of Thundertree** | Self-discovery / Reidoth | Thundertree | Loot from dragon hoard (if killed); Reidoth's info | 3,900 XP (if dragon killed) |
| **Halia's Offer** | Halia Thornton | Phandalin β Redbrand Hideout | 100 gp + Zhentarim favor | 300 XP |
| **Droop the Goblin** | Self-discovery | Redbrand Hideout | Guide/ally | β |
| **The Dendrar Family** | Self-discovery | Redbrand Hideout | Town gratitude | β |
| **Lionshield Coster Stolen Goods** | Linene Liadon | Phandalin | Reward + trade discount | β |
`
1.0 (Ambush) β 1.1 (Cave Mouth) [follow goblin tracks]
1.1 β 1.2, 1.3, 1.4 [branching paths in cave]
1.2/1.3/1.4 β 1.5 (Klarg) [converge on boss]
1.5/1.3 β 1.6 (Prisoner) [find Sildar]
1.6 β 2.0 (Phandalin) [travel to town]
2.0 β 2.1-2.9 [explore town freely]
2.7 (Sleeping Giant fight) β 2.8/2.9 [Redbrand hideout hook]
2.9 β 2.10-2.17 [dungeon crawl]
2.0 β 3.0-3.7 [wilderness locations, any order]
3.4 (Reidoth) β 3.8 (Cragmaw Castle) [critical path]
3.8-3.14 β 4.0 [Wave Echo Cave]
4.0 β 4.1-4.9 [linear dungeon with branches]
4.9 (Black Spider) β FINALE
`
1. Cragmaw Hideout: Kill Klarg or negotiate? β affects later reputation
2. Redbrand Hideout: Kill or capture Glasstaff? β affects Zhentarim quest
3. Thundertree: Fight or negotiate with Venomfang? β massive risk/reward
4. Agatha: What question to ask? β affects information gathered
5. Forge of Spells: Claim, seal, or destroy? β major narrative branch
6. Nezznar: Kill or capture? β affects faction outcomes
| Encounter | Party Level | Difficulty | Notes |
|---|---|---|---|
| Goblin Ambush (1.0) | 1 | Easy | Tutorial fight |
| Klarg (1.5) | 1 | Hard/Deadly | First boss; can TPK if unprepared |
| Redbrand Ruffians (2.7) | 2 | Medium | Social trigger possible |
| Nothic (2.15) | 2 | Medium | Social encounter option |
| Glasstaff (2.16) | 2-3 | Medium-Hard | May flee |
| Venomfang (3.3) | 3-4 | **Deadly** | Green dragon breath weapon is devastating |
| Wyvern Tor Orcs (3.7) | 3 | Medium | Straightforward combat |
| King Grol (3.13) | 4 | Hard | Multiple enemies |
| Forge Spectator (4.8) | 4 | Medium | Can be negotiated with |
| Nezznar Final (4.9) | 4-5 | Hard | Tactical wizard + spider allies |
Generated for The Binding Engine scene graph implementation.
Adventure: Lost Mine of Phandelver (Wizards of the Coast, 2014)
Drafted: July 17, 2026
Status: SPEC β Not Started
Campaign Mode is The Binding's Phase II: a full AI Dungeon Master that runs open-ended D&D 5e sessions for 1-6 players. Unlike Adventure Mode (curated book-based scenes), Campaign Mode is sandbox β the AI DM creates worlds, NPCs, quests, and combat encounters on the fly, responding to player actions in real time.
The Phase 1 architecture was designed for this from Day 1. The session model, message router, rule engine, and combat manager all accept multi-player inputs already. Campaign Mode is purely additive β no rewrites to existing code.
| Module | File(s) | What It Does | Campaign Mode Reuse |
|---|---|---|---|
| **Session Model** | `src/session/index.js` (330 lines) | Session container with `mode` field (`adventure`/`campaign`), players array, hostId, turnOrder, worldState, suggestions | β Already has campaign mode enum, lobby state, turn management fields |
| **Message Router** | `src/session/message-router.js` (271 lines) | DmMessage with targets[], types: narration/dice_result/combat_update/whisper/system | β Whisper type exists, spectator_suggestion type exists |
| **Rule Engine** | `src/rule-engine/` (7 modules, ~108KB) | D&D 5e: 12 classes, full SRD races, combat, stats, character sheets | β Player-count agnostic β works for 1-6 already |
| **Combat Manager** | `src/combat/combat-manager.js` (438 lines) | Initiative, multi-foe encounters, action economy, ENEMY_TEMPLATES | β Needs monster stat block expansion |
| **Dynamic Difficulty** | `src/difficulty/dynamic-difficulty.js` (370 lines) | Rubber-band scaling: 70% fair, 20% power window, 10% challenge | β Works as-is |
| **Coin Engine** | `src/coin-engine/index.js` (428 lines) | Categories: creativity/investigation/roleplay/combat/exploration, tier system | β Needs per-player tracking |
| **Inventory** | `src/inventory/inventory.js` (598 lines) | Item definitions with combat effects, equipment slots | β Needs per-player isolation |
| **AI DM Service** | `src/ai-dm/` (4 modules, 1,319 lines) | LLM orchestration, context management, DM prompts | β οΈ Needs campaign-specific prompts + world state management |
| **Character** | `src/character/` (4 modules, 1,505 lines) | Character model, service, portrait gen | β οΈ Needs multi-character support per session |
| **Dice Service** | `src/dice/` (4 modules, 899 lines) | All die types, 207 tests passing | β Works as-is |
| **Auth** | `src/auth/token-store.js` (262 lines) | Beta token validation | β Works as-is |
| **TTS Voice** | `src/voice/tts-service.js` (408 lines) | Text-to-speech service | β Works as-is |
| New Module | Purpose | Priority |
|---|---|---|
| `src/campaign/` | Campaign session manager, world generator, quest engine | P0 β Core |
| `src/campaign/world-builder.js` | Procedural world generation (locations, NPCs, hooks) | P0 β Core |
| `src/campaign/quest-engine.js` | Quest creation, tracking, completion | P0 β Core |
| `src/campaign/encounter-builder.js` | Combat encounter generation from monster stat blocks | P1 β Combat |
| `src/campaign/monster-manual.js` | Monster stat block database (SRD creatures) | β DONE |
| `src/campaign/turn-manager.js` | Turn order, initiative, action resolution for parties | P1 β Combat |
| `src/campaign/loot-engine.js` | Treasure generation, magic item drops | P2 β Progression |
| `src/campaign/npc-engine.js` | NPC personality, dialogue, memory, relationships | P1 β Roleplay |
| `src/campaign/campaign-prompts.js` | DM system prompts for open-ended play | P0 β Core |
| `src/campaign/session-persistence.js` | Save/resume campaign state to disk | P1 β Persistence |
| `src/api/campaign-routes.js` | Campaign-specific API endpoints | P0 β Core |
Goal: A single player can start a campaign, the AI DM generates a world, and the player can explore and interact.
#### 2A.1 Campaign Session Manager (src/campaign/index.js)
`
CampaignSession extends Session:
- mode: 'campaign'
- world: WorldState (generated locations, NPCs, quests)
- party: PartyState (characters, positions, shared inventory)
- campaignLog: CampaignEvent[] (full history for context)
- dmContext: DMContext (current situation, active threads)
`
Key functions:
createCampaign(options) β Initialize a new campaign sessiongenerateStartingWorld(theme, level) β Create the initial world stateprocessCampaignAction(session, playerId, action) β Handle player actions in campaign modeadvanceWorldState(session, action, result) β Update world based on what happened#### 2A.2 World Builder (src/campaign/world-builder.js)
Generates a sandbox world from a theme seed:
`javascript
WorldState = {
locations: {
'loc_tavern': {
id: 'loc_tavern',
name: 'The Rusty Flagon',
type: 'settlement',
description: 'A weathered tavern at the crossroads...',
npcs: ['npc_innkeeper', 'npc_mysterious_stranger'],
connections: ['loc_forest', 'loc_castle_ruins'],
discovered: true,
events: [] // things that happened here
}
},
npcs: {
'npc_innkeeper': {
id: 'npc_innkeeper',
name: 'Elara Thornwick',
race: 'Human',
role: 'innkeeper',
personality: ['warm', 'gossipy', 'secretly afraid'],
attitude: 0.5, // -1 to 1, affects info sharing
knownInfo: ['rumors_about_castle', 'local_politics'],
secrets: ['saw_the_creature_last_night'],
dialogueHistory: []
}
},
quests: { active: [], completed: [], available: [] },
globalFlags: {},
timeOfDay: 'evening',
dayCount: 1,
currentLocation: 'loc_tavern'
}
`
Themes (preset starting points):
gothic_horror β Dark villages, haunted forests, vampire lordssword_coast β Classic D&D frontier, dungeons, dragonsnoir_mystery β Urban intrigue, thieves guilds, political corruptionwilderness_expedition β Exploration, ruins, ancient civilizationscustom β Player describes a setting, AI generates from description#### 2A.3 Campaign DM Prompts (src/campaign/campaign-prompts.js)
The core difference from Adventure Mode: the DM has no pre-written scenes. It must:
1. Describe the world β Rich sensory descriptions of locations and NPCs
2. React to player actions β Resolve open-ended actions with consequences
3. Drive narrative β Create tension, stakes, and story arcs organically
4. Manage NPCs β Distinct personalities, memory of past interactions
5. Track consequences β Actions have lasting effects on the world
System prompt structure:
`
You are the Dungeon Master for a D&D 5e campaign.
WORLD STATE:
{serialized world state}
ACTIVE QUESTS:
{quest list with status}
PARTY STATUS:
{character sheets for all players}
CURRENT SITUATION:
{what's happening right now, recent events}
YOUR ROLE:
RESPONSE FORMAT:
[Your narration here]
[DICE_ROLL: ability_check, DC 15, Wisdom (Perception)]
βorβ
[SUGGESTED_ACTIONS: action1, action2, action3, action4]
`
#### 2A.4 Campaign API Routes (src/api/campaign-routes.js)
`
POST /api/campaigns β Create new campaign
GET /api/campaigns/:id β Get campaign state
POST /api/campaigns/:id/actions β Submit player action
GET /api/campaigns/:id/events β SSE stream for campaign events
POST /api/campaigns/:id/join β Join existing campaign (Phase 2B)
GET /api/campaigns/:id/character β Get character sheet
POST /api/campaigns/:id/character β Create/update character
GET /api/campaigns/:id/map β Get discovered locations (theater of mind)
POST /api/campaigns/:id/save β Save campaign state
GET /api/campaigns β List active campaigns
`
Goal: 1-6 players can join a campaign, with host/spectator roles and turn management.
#### 2B.1 Session Lobby System
The session model already has SessionState.LOBBY. Build out:
#### 2B.2 Turn Manager (src/campaign/turn-manager.js)
`
TurnManager:
- turnOrder: Player[] (determined by initiative or narrative)
- currentPlayer: Player (whose turn it is)
- turnPhase: 'action' | 'bonus_action' | 'movement' | 'reaction' | 'free'
- turnTimer: optional (for pacing)
- calculateTurnOrder(characters) β Initiative-based or narrative-based
- advanceTurn() β Move to next player
- isPlayerTurn(playerId) β Check if it's this player's turn
- forceAdvance() β Skip AFK player after timeout
`
Turn modes:
#### 2B.3 DM Whisper System
The message router already supports whisper type. Build out:
#### 2B.4 Per-Player State Isolation
shared and private[playerId]Goal: Full D&D 5e combat with initiative, spell slots, abilities, and loot.
#### 2C.1 Monster Manual (src/campaign/monster-manual.js)
SRD creatures as stat blocks:
`javascript
MONSTERS = {
goblin: {
name: 'Goblin', cr: 0.25, type: 'humanoid',
ac: 15, hp: 7, speed: '30ft',
str: 8, dex: 14, con: 10, int: 10, wis: 8, cha: 8,
skills: ['Stealth +6'],
traits: ['Nimble Escape'],
actions: ['Scimitar +4 (1d6+2)', 'Shortbow +4 (1d6+2)'],
xp: 50
},
// ... 50+ SRD monsters
}
`
#### 2C.2 Encounter Builder (src/campaign/encounter-builder.js)
#### 2C.3 Loot Engine (src/campaign/loot-engine.js)
#### 2C.4 Leveling System
#### 2D.1 Session Persistence (src/campaign/session-persistence.js)
#### 2D.2 Advanced DM Features
#### 2D.3 Campaign UI
Campaign state serializes to JSON, stored in data/campaigns/{id}.json. Same pattern as adventure sessions. Reasons:
Campaign Mode generates much more context than Adventure Mode. Strategy:
The AI DM must output structured data alongside narration. Parse tags:
`
[DICE_ROOL: ability_check, DC 15, Wisdom (Perception)]
[COMBAT_START: goblin x4, difficulty: medium]
[NPC_ATTITUDE: npc_innkeeper, +0.1, "shared rumors"]
[QUEST_UPDATE: quest_find_sword, status: completed]
[LOCATION_DISCOVERED: loc_hidden_cave, "A narrow opening in the cliff face"]
[ITEM_GRANTED: potion_of_healing, to: player_1]
[EXPLORED: talk_to_innkeeper]
`
`
All messages β MessageRouter
βββ narration β targets: [] (broadcast to all)
βββ whisper β targets: [specific_player_id]
βββ dice_result β targets: [roller_id] + broadcast summary
βββ combat_update β targets: [] (all need to see)
βββ system β targets: [] (player joined, etc.)
βββ suggested_actions β targets: [current_player_id]
`
`
src/campaign/
βββ index.js β Campaign session manager (main entry)
βββ world-builder.js β Procedural world generation
βββ quest-engine.js β Quest creation/tracking/completion
βββ encounter-builder.js β Combat encounter generation
βββ monster-manual.js β SRD monster stat blocks
βββ turn-manager.js β Turn order and initiative
βββ loot-engine.js β Treasure/magic item generation
βββ npc-engine.js β NPC personality/dialogue/memory
βββ campaign-prompts.js β DM system prompts for campaigns
βββ session-persistence.js β Save/resume functionality
βββ dungeon-generator.js β Procedural dungeon rooms (Phase 2D)
βββ themes/
βββ gothic-horror.js β Gothic horror world template
βββ sword-coast.js β Classic D&D frontier template
βββ noir-mystery.js β Urban intrigue template
βββ wilderness.js β Exploration template
βββ index.js β Theme registry
src/api/
βββ campaign-routes.js β Campaign API endpoints
data/
βββ campaigns/ β Saved campaign state files
βββ .gitkeep
public/
βββ campaign.html β Campaign Mode frontend
`
Everything Campaign Mode needs is already in the dependency tree:
The only external dependency is the LLM API (OpenAI or equivalent), which is already configured.
| Phase | Scope | Effort | Dependencies |
|---|---|---|---|
| **2A: Foundation** | Campaign session, world builder, DM prompts, API | 2-3 weeks | None β builds on existing |
| **2B: Multiplayer** | Lobby, turn manager, whispers, per-player state | 2-3 weeks | Phase 2A complete |
| **2C: Combat** | Monster manual, encounters, loot, leveling | 2-3 weeks | Phase 2A complete (can parallel with 2B) |
| **2D: Polish** | Persistence, advanced DM, UI | 2-3 weeks | Phases 2A+2B+2C complete |
Total: 8-12 weeks for full Campaign Mode.
Phase 2A alone (single-player campaign) is deliverable in 2-3 weeks and provides immediate value β a player can start a campaign, explore a generated world, fight monsters, and complete quests without multiplayer.
| Risk | Impact | Mitigation |
|---|---|---|
| LLM context window overflow in long campaigns | High | Sliding window + world state compression + summarize old events |
| AI DM generates inconsistent world state | High | Strict JSON schema for world updates, validate on parse |
| Multiplayer turn management feels slow | Medium | Fast turn timers, narrative mode outside combat |
| Monster stat blocks are wrong/broken | Medium | Unit test every stat block against SRD reference |
| Campaign save files become corrupted | Medium | Auto-save with versioning, keep last 3 saves |
| LLM cost per campaign session is high | Medium | Optimize prompt size, cache world state, use cheaper models for NPC dialogue |
| Players grief/abuse in multiplayer | Low | Host kick, report system, session-level bans |
1. Review this plan β Lawman to approve/adjust scope and priorities
2. Start Phase 2A β Begin with campaign session manager + world builder
3. Write campaign DM prompts β The most critical piece β the DM's voice defines the experience
4. Build first theme β Gothic Horror (natural extension of existing Dracula content)
5. Single-player E2E test β One player, one campaign, full loop
This plan is a living document. Update as implementation progresses.
The Binding includes a comprehensive monster database built from the D&D 5.1 Systems Reference Document (SRD), licensed under Creative Commons Attribution 4.0 International (CC-BY-4.0). This database powers combat encounters in Campaign Mode and Digital Dungeon Master Mode.
Future: The Binding will create its own custom monsters beyond the SRD. Custom creatures will extend the same JSON schema and live in a separate file (`data/monsters/binding-custom.json`).
Source: Systems Reference Document 5.1
License: Creative Commons Attribution 4.0 International (CC-BY-4.0)
License URL: https://creativecommons.org/licenses/by/4.0/legalcode
API Source: https://www.dnd5eapi.co
*This work includes material from the Systems Reference Document 5.1, available at https://dnd.wizards.com/resources/systems-reference-document, and licensed under Creative Commons Attribution 4.0 International.*
Custom Binding monsters will be released under the project's own license.
Each monster in the database follows this JSON schema:
| Field | Type | Description | |
|---|---|---|---|
| `name` | string | Creature name (e.g., "Goblin", "Ancient Red Dragon") | |
| `source` | string | Always "SRD 5.1" for license compliance | |
| `license` | string | Always "CC-BY-4.0" | |
| `cr` | number | Challenge Rating (0, 0.125, 0.25, 0.5, 1β30) | |
| `xp` | number | XP value corresponding to CR | |
| `type` | string | Creature type (beast, undead, dragon, fiend, etc.) | |
| `subtype` | string\ | null | Subtype (goblinoid, elf, shapechanger, etc.) |
| `size` | string | Tiny, Small, Medium, Large, Huge, Gargantuan | |
| `alignment` | string | Typical alignment | |
| `ac` | number | Armor Class | |
| `ac_type` | string | Source of AC (natural armor, leather armor, etc.) | |
| `hp` | number | Average hit points | |
| `hp_formula` | string | Hit dice formula (e.g., "2d6", "17d12+119") | |
| `speed` | object | Movement speeds: `{ walk, fly, swim, climb, burrow }` (ft.) | |
| `abilities` | object | `{ str, dex, con, int, wis, cha }` | |
| `skills` | object | Skill bonuses (e.g., `{ stealth: 6, perception: 3 }`) | |
| `senses` | string[] | Special senses (darkvision, blindsight, etc.) | |
| `languages` | string[] | Known languages | |
| `traits` | object[] | Special abilities: `[{ name, description }]` | |
| `actions` | object[] | Actions/attacks: `[{ name, attack_bonus?, damage?, damage_type?, description }]` | |
| `reactions` | object[] | Reactions: `[{ name, description }]` | |
| `legendary_actions` | object[] | Legendary actions (dragons, liches, etc.) | |
| `lair_actions` | object[] | Lair actions (if any) | |
| `damage_immunities` | string[] | Damage type immunities | |
| `damage_resistances` | string[] | Damage type resistances | |
| `damage_vulnerabilities` | string[] | Damage type vulnerabilities | |
| `condition_immunities` | string[] | Condition immunities | |
| `tags` | string[] | Additional tags | |
| `environment` | string[] | Environments where found | |
| `tactics` | string | Brief tactical description |
| CR | XP | CR | XP | CR | XP |
|---|---|---|---|---|---|
| 0 | 10 | 5 | 1,800 | 13 | 10,000 |
| 1/8 | 25 | 6 | 2,300 | 14 | 11,500 |
| 1/4 | 50 | 7 | 2,900 | 15 | 13,000 |
| 1/2 | 100 | 8 | 3,900 | 16 | 15,000 |
| 1 | 200 | 9 | 5,000 | 17 | 18,000 |
| 2 | 450 | 10 | 5,900 | 18 | 20,000 |
| 3 | 700 | 11 | 7,200 | 19 | 22,000 |
| 4 | 1,100 | 12 | 8,400 | 20β30 | 25,000β155,000 |
| Level | Easy | Medium | Hard | Deadly |
|---|---|---|---|---|
| 1 | 25 | 50 | 75 | 100 |
| 2 | 50 | 100 | 150 | 200 |
| 3 | 75 | 150 | 225 | 400 |
| 4 | 125 | 250 | 375 | 500 |
| 5 | 250 | 500 | 750 | 1,100 |
| 10 | 600 | 1,200 | 1,900 | 2,800 |
| 15 | 1,400 | 2,800 | 4,300 | 6,400 |
| 20 | 2,800 | 5,700 | 8,500 | 12,700 |
| # of Monsters | Multiplier |
|---|---|
| 1 | Γ1 |
| 2 | Γ1.5 |
| 3β6 | Γ2 |
| 7β10 | Γ2.5 |
| 11β14 | Γ3 |
| 15+ | Γ4 |
Party size adjustment: Party of 1β2 β multiplier increases one step. Party of 6+ β multiplier decreases one step.
The encounter builder (MonsterManual.buildRandomEncounter()) automatically:
1. Selects monsters appropriate for the party's level and environment
2. Calculates raw XP from selected creatures
3. Applies the encounter multiplier
4. Compares against DMG thresholds to determine difficulty
5. Returns a balanced encounter tagged as trivial/easy/medium/hard/deadly
| Type | Count | Examples |
|---|---|---|
| Beast | 87 | Wolf, Giant Eagle, T. Rex |
| Humanoid | 50 | Goblin, Bandit, Mage |
| Dragon | 43 | Ancient Red Dragon, Wyrmling Blue |
| Monstrosity | 39 | Basilisk, Medusa, Hydra |
| Fiend | 23 | Pit Fiend, Balor, Imp |
| Undead | 20 | Zombie, Lich, Vampire |
| Elemental | 16 | Fire Elemental, Djinni |
| Swarm | 10 | Swarm of Rats, Swarm of Bats |
| Giant | 10 | Hill Giant, Storm Giant |
| Construct | 9 | Iron Golem, Shield Guardian |
| Plant | 6 | Shambling Mound, Treant |
| Fey | 6 | Dryad, Satyr, Sprite |
| Celestial | 6 | Planetar, Solar, Deva |
| Aberration | 5 | Aboleth, Mind Flayer |
| Ooze | 4 | Black Pudding, Gelatinous Cube |
Monsters are tagged by their natural environments, which the encounter builder uses to generate thematic encounters:
| Metric | Value |
|---|---|
| Total Monsters | 334 |
| CR Range | 0 β 30 |
| Dragon Families | 10 types Γ 4 ages = 40 variants |
| Legendary Creatures | ~20 (dragons, liches, etc.) |
| Creature Types | 15 |
| File Size | ~764 KB |
| License | CC-BY-4.0 |
| CR | Count |
|---|---|
| 2 | 43 |
| 1/2 | 33 |
| 1/4 | 32 |
| 0 | 29 |
| 5 | 27 |
| 1 | 25 |
| 3 | 22 |
| 1/8 | 19 |
| 4 | 15 |
| 8 | 10 |
The Binding plans to extend beyond the SRD with original creatures:
Custom monsters will use the same JSON schema as the SRD database, stored in a separate file (data/monsters/binding-custom.json). The Monster Manual module will automatically merge both databases.
| Component | Location |
|---|---|
| SRD Monster Database | `data/monsters/srd-monsters.json` |
| Custom Monsters (future) | `data/monsters/binding-custom.json` |
| Monster Manual Module | `src/campaign/monster-manual.js` |
| Database Generator | `data/monsters/build_monster_db.py` |
| Campaign Mode Plan | `docs/campaign-mode-plan.md` |
| API Endpoints | See campaign-mode-plan.md for combat routes |
Started: July 17, 2026
Last Updated: July 18, 2026
| Phase | Status | Progress | ETA |
|---|---|---|---|
| **2A: Campaign Foundation** | β Code Complete + Tested | 95% | Weeks 1-3 |
| **2B: Multiplayer** | β Code Complete + Tested | 80% | Weeks 4-6 |
| **2C: Combat & Progression** | β Code Complete + Tested | 80% | Weeks 7-9 |
| **2D: Polish & Advanced** | π‘ Core Built, Needs Integration | 60% | Weeks 10-12 |
| **Storyline Mode Refinement** | βͺ Not Started | 0% | Parallel |
| **Digital DM Mode** | π‘ Scaffolding Done | 30% | After 2A |
| # | Task | Status | File(s) |
|---|---|---|---|
| 2A.1 | Campaign Session Manager | β Code Complete | `src/campaign/index.js` (480 lines) |
| 2A.2 | World Builder | β Code Complete | `src/campaign/world-builder.js` (308 lines) |
| 2A.3 | Campaign DM Prompts | β Code Complete | `src/campaign/campaign-prompts.js` (162 lines) |
| 2A.4 | Campaign API Routes | β Code Complete | `src/api/campaign-routes.js` (253 lines) |
| 2A.5 | Quest Engine | β Code Complete | `src/campaign/quest-engine.js` (168 lines) |
| 2A.6 | Digital DM Scaffolding | β Code Complete | `src/campaign/digital-dm.js` (153 lines) |
| 2A.7 | Server Integration | β Done | `src/api/server.js` (routes wired) |
| 2A.8 | Unit Tests (Phase 2A) | β Done (56/56 passing) | `tests/phase2-campaign.test.js` |
| 2A.9 | Integration Test (E2E) | β Done (3/3 passing) | `tests/phase2-e2e.test.js` |
| 2A.10 | Storyline Mode Refinement | βͺ Not Started | β |
| 2A.11 | Adventure Catalog (12 adventures, level-tagged) | β Done | `docs/adventure-catalog.md` |
| 2A.12 | Lost Mine of Phandelver Manifest | β Done | `docs/lmop-adventure-manifest.md` |
| 2A.13 | Adventure Level Display in Dropdown | β Done | `public/index.html` |
| # | Task | Status | File(s) |
|---|---|---|---|
| 2B.1 | Turn Manager | β Code Complete + Tested | `src/campaign/turn-manager.js` (260 lines) |
| 2B.2 | Lobby Manager | β Code Complete + Tested | `src/campaign/lobby-manager.js` (391 lines) |
| 2B.3 | Whisper System | β Code Complete + Tested | `src/campaign/whisper-system.js` (371 lines) |
| 2B.2 | Initiative System | β Done | Included in turn-manager |
| 2B.3 | Narrative/Combat Mode Switching | β Done | `switchMode()` in turn-manager |
| 2B.4 | AFK Auto-Skip | β Done | `forceAdvance()` in turn-manager |
| 2B.5 | Participant Add/Remove | β Done | `addParticipant()` / `removeParticipant()` |
| 2B.6 | Session Lobby System | βͺ Not Started | β |
| 2B.7 | DM Whisper System | βͺ Not Started | β |
| 2B.8 | Per-Player State Isolation | βͺ Not Started | β |
| # | Task | Status | File(s) |
|---|---|---|---|
| 2C.1 | Monster Manual | β Done (pre-existing) | `src/campaign/monster-manual.js` (364 lines) |
| 2C.2 | Encounter Builder | β Code Complete + Tested | `src/campaign/encounter-builder.js` (260 lines) |
| 2C.3 | Loot Engine | β Code Complete + Tested | `src/campaign/loot-engine.js` (350 lines) |
| 2C.4 | NPC Engine | β Code Complete + Tested | `src/campaign/npc-engine.js` (300 lines) |
| 2C.5 | Leveling System | β Code Complete + Tested | `src/campaign/leveling.js` (526 lines) |
| 2C.6 | Shop System | β Done | Included in loot-engine |
| # | Task | Status | File(s) |
|---|---|---|---|
| 2D.1 | Session Persistence | β Code Complete + Tested | `src/campaign/session-persistence.js` (280 lines) |
| 2D.2 | Campaign Journal | β Done | `generateCampaignJournal()` in session-persistence |
| 2D.3 | Auto-Save | β Done | `shouldAutoSave()` in session-persistence |
| 2D.4 | Save/Load/List/Delete | β Done | Full CRUD in session-persistence |
| 2D.5 | NPC Relationship System | β Done | Included in npc-engine |
| 2D.6 | Weather/Time System | β Done | Included in world-builder + campaign index |
| 2D.7 | Dungeon Generator | β Code Complete + Tested | `src/campaign/dungeon-generator.js` (622 lines) |
| 2D.8 | Campaign UI | βͺ Not Started | β |
| V.1 | Voice-to-Text (STT) Service | β Code Complete + Tested | `src/voice/stt-service.js` (230 lines) |
| V.2 | Text-to-Voice (TTS) Service | β Done (pre-existing) | `src/voice/tts-service.js` (408 lines) |
| Test Suite | Tests | Status |
|---|---|---|
| Phase 1 Tests | (pre-existing) | β |
| Phase 2A Campaign Tests | 56 | β 56/56 passing |
| Phase 2B/2C/2D Tests | 124 | β 124/124 passing |
| Phase 2 Extended Tests | 91 | β 91/91 passing |
| E2E Integration Tests | 3 | β 3/3 passing |
| **Total** | **274** | **β All passing** |
| File | Lines | Purpose |
|---|---|---|
| `index.js` | 480 | Campaign session manager (core) |
| `world-builder.js` | 308 | Procedural world generation |
| `quest-engine.js` | 168 | Quest creation/tracking/completion |
| `campaign-prompts.js` | 162 | AI DM system prompts |
| `digital-dm.js` | 153 | Digital DM mode scaffolding |
| `monster-manual.js` | 364 | SRD monster stat blocks |
| `encounter-builder.js` | 260 | Combat encounter generation |
| `turn-manager.js` | 260 | Turn order, initiative, phases |
| `loot-engine.js` | 350 | Treasure, magic items, shops |
| `npc-engine.js` | 300 | NPC personality, dialogue, memory |
| `session-persistence.js` | 280 | Save/load, journal, auto-save |
| `lobby-manager.js` | 391 | Session lobby, invite codes, ready-up |
| `whisper-system.js` | 371 | DM whispers, private messaging, visibility |
| `leveling.js` | 526 | XP, leveling, class features, proficiency |
| `dungeon-generator.js` | 622 | Procedural dungeons, rooms, traps, bosses |
| **Total** | **4,974** | **16 modules** |
| File | Lines | Purpose |
|---|---|---|
| `index.js` | 40 | Voice module entry point (TTS + STT exports) |
| `tts-service.js` | 408 | Text-to-speech (Novita, OpenAI, ElevenLabs) |
| `stt-service.js` | 230 | Speech-to-text (OpenAI Whisper) |
| **Total** | **678** | **3 modules** |
| # | Blocker | Priority | Status | Details |
|---|---|---|---|---|
| B1 | **LLM API key for campaign testing** | β Done | RESOLVED | Using existing Novita API key (`NOVITA_API_KEY`). Model: `qwen/qwen3.6-plus` (free). E2E tests pass with real LLM. |
| B2 | **Gothic Horror theme approval** | π‘ Medium | OPEN | First world theme for Campaign Mode. Plan proposes Gothic Horror (natural extension of Dracula content). Approve or pick different starting theme? |
| B3 | **Storyline vs Adventure Mode naming** | π‘ Medium | OPEN | Phase 1 calls it "Adventure Mode." Phase 2 renames to "Storyline Mode." Should we rename existing references now or keep backward compat? |
| B4 | **Digital DM scope confirmation** | π‘ Medium | OPEN | Digital DM scaffolding is done. How much more should we build in Phase 2? Full implementation or keep as scaffolding and flesh out in Phase 3? |
| B5 | **Campaign session storage** | π’ Low | OPEN | Plan uses JSON files (consistent with Phase 1). Confirm no database migration needed for beta? |
| B6 | **Campaign API auth** | π‘ Medium | OPEN | Current campaign routes have no beta token validation (unlike adventure routes). Should we add it now or later? |
| B7 | **E2E integration test needs live LLM** | β Done | RESOLVED | E2E tests pass with real Novita LLM (`qwen/qwen3.6-plus`). |
| B8 | **srd-monsters.json path mismatch** | π’ Low | FIXED | Monster DB was at `public/docs/` but monster-manual.js expected `src/data/monsters/`. Copied file to fix. Consider permanent resolution. |
| Decision | Choice | Date |
|---|---|---|
| Architecture | Build on existing Phase 1 modules (no rewrites) | July 17 |
| Monster Manual | Already done (`src/campaign/monster-manual.js`) | Pre-existing |
| Session Model | Already has campaign mode enum + multiplayer fields | Pre-existing |
| Storage | JSON files for beta (same as Phase 1) | Per plan |
| Server Integration | Try/catch wrapped, graceful fallback if routes fail to load | July 17 |
| Monster DB Path | Copied to `src/data/monsters/` to match monster-manual.js | July 18 |
| Encounter Builder API | Uses `MonsterManual.getAll()` not raw MONSTERS dict | July 18 |
The Binding is a browser-based Progressive Web App (PWA) that streams AI narration, renders dice animations, plays voice audio, and loads scene images in real time. This spec covers the minimum and recommended hardware, browser support, network requirements, and data usage for each phase of the platform.
| Category | Minimum | Recommended | Notes |
|---|---|---|---|
| Smartphone | iPhone SE (2020) / Android 10+ with 3GB RAM | iPhone 13+ / Pixel 7+ / Samsung S22+ | Primary target - 70%+ of players expected on mobile |
| Tablet | iPad (8th gen) / Android tablet with 4GB RAM | iPad Air+ / Samsung Tab S8+ | Best landscape experience for campaign play |
| Desktop | Any machine from 2018+ with 4GB RAM | Modern laptop/desktop with 8GB RAM | Chrome, Edge, Firefox, or Safari |
| Chromebook | Any Chromebook with Chrome 100+ | Recent Chromebook with 4GB+ RAM | Fully supported - runs as PWA |
| Browser | Minimum Version | Support Level |
|---|---|---|
| Chrome / Chromium | v100+ | Full - primary development target |
| Safari (iOS/macOS) | v16+ | Full - voice input uses Web Speech API |
| Firefox | v100+ | Full - all features supported |
| Edge | v100+ | Full - Chromium-based, identical to Chrome |
| Samsung Internet | v17+ | Full - popular on Android devices |
| Opera Mini | - | Not supported - lacks WebSocket/SSE support |
Why PWA? No app store install required. Players open a URL and play. The PWA caches assets (dice animations, UI, fonts) for instant reload and partial offline support. Voice and AI features require an active connection.
| Feature | Min Bandwidth | Recommended | Latency Tolerance | Data per Session (1hr) |
|---|---|---|---|---|
| Text-only gameplay | 64 Kbps | 1 Mbps+ | < 2000ms RTT | 0.5β1 MB |
| + Voice output (DM speaks) | 128 Kbps | 2 Mbps+ | < 1500ms RTT | 2β5 MB |
| + Voice input (player speaks) | 256 Kbps | 3 Mbps+ | < 1500ms RTT | 3β7 MB |
| + Scene images | 1 Mbps | 5 Mbps+ | < 3000ms RTT | 10β30 MB |
| + Multiplayer (spectator join) | 1 Mbps | 5 Mbps+ | < 2000ms RTT | 5β15 MB |
| Full experience (all features) | 2 Mbps | 10 Mbps+ | < 1500ms RTT | 15β50 MB |
Mobile data note: A 1-hour text-only session uses roughly 1 MB - about the same as loading a news article. Voice adds 2β5 MB. Scene images are the heaviest feature (10β30 MB/hour). Players on limited data plans can disable image generation in settings.
| Metric | Target | How We Achieve It |
|---|---|---|
| First contentful paint | < 1.5s | PWA precaching, minimal JS bundle, static shell |
| Text response time | < 500ms | Server-sent events (SSE), streaming LLM responses |
| Voice response time | < 2s | Streaming TTS, audio starts playing before generation completes |
| Dice animation | 60fps, no jank | Pre-baked lottie sprites, GPU-accelerated transforms |
| Image generation | Background, non-blocking | Images load asynchronously - gameplay never waits for art |
| Page interaction (TTI) | < 2s on 3G | Code splitting, lazy-loaded modules, minimal initial bundle |
| Feature | Requirement | Details |
|---|---|---|
| Speaker / headphones | Required for voice features | DM voice, NPC voices, ambient audio, dice sound effects |
| Microphone | Optional | For voice input (player speaks actions). Falls back to text if unavailable or denied. |
| Audio codec support | MP3 / AAC | All modern browsers support both. OGG fallback for Firefox. |
| Item | Size | Details |
|---|---|---|
| PWA cache (initial) | 5β15 MB | App shell, UI assets, fonts, dice animation sprites |
| Cached scene images | Up to 100 MB | Optional - player can clear cache in settings |
| Session data (localStorage) | < 1 MB | Session ID, rejoin code, player preferences, settings |
| Total recommended free space | 150 MB | Comfortable headroom for all cached content |
| Input Method | Support |
|---|---|
| Touch | Primary - tap suggested actions, swipe to scroll, long-press for context |
| Keyboard | Full - tab navigation, enter to submit, number keys (1β4) to select actions |
| Voice | Optional - Web Speech API for input, TTS for output. Graceful fallback to text. |
| Screen readers | Planned - ARIA labels on all interactive elements, semantic HTML throughout |
DRAC-7A3K).| Phase | Expected Load | Infrastructure |
|---|---|---|
| Phase 1 (beta) | 50β200 concurrent sessions | Single Render instance (free tier), in-memory sessions |
| Phase 2 (launch) | 500β2,000 concurrent | Render standard tier, Redis session store, CDN for static assets |
| Phase 3 (growth) | 5,000β20,000 concurrent | Multi-instance Render, Redis cluster, Paxeer Cloud frontend, database persistence |
| Phase 4 (scale) | 50,000+ concurrent | Auto-scaling compute, global CDN, Paxeer-native frontend, sharded session stores |
Every layer is designed to scale independently. The frontend moves to Paxeer Cloud. The session store moves from in-memory to Redis to a database. The coin ledger moves from in-memory to Paxeer smart contracts. The DM brain stays on a compute instance - it's the only layer that truly needs a server.
The Binding is a hybrid application: the game engine runs on a traditional server, and the economy/assets live on the Paxeer blockchain. This is the same architecture every major web3 game uses. A blockchain cannot run a game server, call AI APIs, or serve web pages - but it is the best place to own assets, process payments, and store player reputation.
A blockchain is a ledger, not a computer. The game runs on a computer. The rewards live on the ledger.
| Layer | Where It Lives | What It Does |
|---|---|---|
| Game Engine | Render.com (Node.js server) | Fastify API server, session management, rule engine (D&D 5e dice math, combat, stats), scene engine, continuity validation |
| AI Dungeon Master | Render.com β OpenAI API | Orchestrates player action β context assembly β LLM call β narrative response + 4 suggested actions. Manages hot/warm/cold context tiers for 50+ hour adventures. |
| Frontend (PWA) | Render.com (same server) | Responsive HTML/CSS/JS served as static files. Service worker for offline shell. Polling-based real-time sync. Works on any device with a browser. |
| Player Wallets | Paxeer Network (chain 125) | PAX balance, token holdings, transaction history. MetaMask or any EVM wallet. |
| Character NFTs | Paxeer Network (ERC-721) | Dynamic NFTs that update as characters level up. Stats, portrait, achievements, tier badges on-chain. |
| $BINDING Token | Paxeer Network (ERC-20) | Platform meme coin. Only minted through gameplay. Tier-weighted conversion from in-game coins. |
| Achievement Badges | Paxeer Network (ERC-1155) | Soulbound (non-transferable) tokens earned through gameplay milestones. |
| Marketplace | Paxeer Network (custom contract) | NFT trading between players: adventures, dice sets, cosmetics. Royalties to creators. |
| Need | Why Blockchain Can't Do It | Where It Actually Runs |
|---|---|---|
| AI narration | Smart contracts cannot call external APIs (no HTTP requests from EVM) | Server β OpenAI API |
| Session state | On-chain storage costs gas per write. A 2-hour session = hundreds of state changes = hundreds of gas fees. | Server memory (in-memory, zero cost, instant) |
| Web pages | A blockchain stores data, it does not serve HTML to browsers | Server static file hosting |
| Dice rolling | On-chain randomness requires VRF oracles - expensive, slow, unnecessary for a single-player game | Server-side cryptographic random |
The game is deployed and running on Render.com. This is the simplest, lowest-cost setup for a Paxeer network beta test.
| Component | Service | Monthly Cost | Status |
|---|---|---|---|
| Game server + frontend | Render Starter plan | $7/mo | Needs upgrade from free tier (free tier spins down after 15 min idle - first visitor waits 30-60s) |
| LLM API (AI DM) | OpenAI GPT-4o-mini | $5β10/mo | Needs API key added as env var on Render |
| Total for beta | $12β17/mo | Handles hundreds of playthroughs |
LLM cost breakdown: GPT-4o-mini costs $0.15 per million input tokens. A full Dracula playthrough (~30K tokens) costs about $0.01. One hundred playthroughs cost roughly $1. This is the cheapest model that produces quality narrative. GPT-4o (better quality) costs 10x more - about $0.15 per playthrough. We recommend starting with mini for beta and upgrading to GPT-4o for launch.
| Testing Phase | What Players Need | What We Need |
|---|---|---|
| Phase 1 Beta (now) | Just a URL. Open in any browser. No wallet needed. No install. | Render paid tier + OpenAI API key |
| Phase 2 Beta (wallet connect) | Paxeer wallet (MetaMask) + small PAX balance for gas | Wallet connection UI + smart contract for coin payouts |
| Phase 3 Launch (full on-chain) | Paxeer wallet + PAX for transactions | Deployed smart contracts (NFTs, marketplace, $BINDING token) |
LLM_API_KEY env var on Render.| Concern | How It's Handled |
|---|---|
| No PII on-chain | Player names, emails, and game actions never touch the blockchain. Only wallet addresses and token balances are public. |
| HTTPS everywhere | All API traffic encrypted in transit. Render provides TLS certificates automatically. |
| Session isolation | Each game session is fully isolated. No data leaks between sessions or players. |
| LLM data handling | Player actions are sent to OpenAI for narration. No player identity data is included. Conversation history is ephemeral. |
| Smart contract safety | Contracts use OpenZeppelin standards. All contracts audited before mainnet. Agent wallet has spend limits enforced at the network layer. |
| Rejoin code security | Short-lived, session-scoped codes. Rate limiting prevents brute force. |
| Stage | Users | Infrastructure | Cost |
|---|---|---|---|
| Beta (now) | 50β200 Paxeer testers | Single Render instance, in-memory sessions | $12β17/mo |
| Launch | 500β2,000 concurrent | Render standard tier, Redis for sessions, CDN for static assets | $50β100/mo |
| Growth | 5,000β20,000 concurrent | Multi-instance, Redis cluster, Paxeer Cloud frontend | $200β500/mo |
| Scale | 50,000+ concurrent | Auto-scaling compute, global CDN, sharded sessions | $1,000β3,000/mo |
The game engine is the only layer that needs a server. Everything else - frontend, assets, economy - can move to decentralized infrastructure over time. The architecture is designed so each layer scales independently.
Real-time 3D physics-based dice. Click any die to roll it - the die tumbles with gravity, bounces off the table, and settles on a random result.
Click any die to roll with real-time 3D physics. The die tumbles with gravity, bounces off the table, and settles on a random result. Tap the overlay to dismiss after the number appears.
Spec: July 17, 2026 • Three modes, one engine • Same rule system, dice, combat, and AI DM • Just different context and freedom levels
Three Modes, One App: The Binding offers three distinct ways to play, all powered by the same engine. The mode is selected at session creation and determines the DM prompts, content source, and player experience — not the server architecture.
| Mode | Description | Players | AI DM Behavior | Content Source |
|---|---|---|---|---|
| π Storyline Mode | Follow the book. Curated scenes with exit pressure ramps keep you in the canonical narrative. | 1 (single player) | Stays on the scene graph. Stays on script. 4 suggested actions per turn. | Pre-written scenes (Dracula, Frankenstein, Holmes) |
| βοΈ Campaign Mode | Sandbox in the book’s world. Explore freely, pursue side quests, build NPC relationships. | 1–6 | Uses the book’s world as a seed but improvises freely. No scene graph. | Book world state (characters, locations, lore) + AI-generated content |
| π² Digital DM Mode | Full Dungeon Master. Completely open-ended. The AI creates the world, NPCs, quests, and combat from scratch. | 1–6 | No pre-written content. Builds everything live from a theme preset. | AI-generated from theme (gothic horror, sword coast, noir, wilderness, custom) |
Same engine. Same rule system. Same dice. Same combat manager. The only difference is how much freedom the DM has:
The session model already has mode field ('storyline' | 'campaign' | 'digital_dm'). The message router, rule engine, and combat manager all work for 1–6 players already. No rewrites needed.
| Phase | Deliverable | Effort | Status |
|---|---|---|---|
| Phase 2A: Campaign Foundation - Single-player campaign, world generation, DM prompts | |||
| 2A.1 | Campaign Session Manager - src/campaign/index.jsExtend session model with world state, party state, campaign log, DM context |
1 week | β Code Complete |
| 2A.2 | World Builder - src/campaign/world-builder.jsProcedural generation: locations, NPCs, connections, quest hooks. Theme presets: gothic horror, sword coast, noir mystery, wilderness |
1 week | β Code Complete |
| 2A.3 | Campaign DM Prompts - src/campaign/campaign-prompts.jsOpen-ended DM prompts for sandbox play. Structured response parsing: [DICE_ROLL], [COMBAT_START], [QUEST_UPDATE], [NPC_ATTITUDE] |
1 week | β Code Complete |
| 2A.4 | Campaign API Routes - src/api/campaign-routes.jsPOST /campaigns, POST /campaigns/:id/actions, GET /campaigns/:id/events (SSE), POST /campaigns/:id/save |
3 days | β Code Complete |
| Phase 2B: Multiplayer - 2-6 players, host/spectator, turn management | |||
| 2B.1 | Session Lobby System - Join flow, ready check, role assignment Host creates campaign, gets share code. Players join β create character β ready up |
1 week | β Code Complete |
| 2B.2 | Turn Manager - src/campaign/turn-manager.jsInitiative-based (combat) and narrative-based (exploration) turn order. Auto-switches between modes. AFK skip after timeout |
1 week | β Code Complete |
| 2B.3 | DM Whisper System - Private messages to individual players Router already supports whisper type. Build DMβPlayer and PlayerβPlayer whisper flows |
3 days | β Code Complete |
| 2B.4 | Per-Player State Isolation - Shared vs private world state Shared: location, visible NPCs, environment. Private: perception results, secret items, NPC relationships |
3 days | β Code Complete |
| Phase 2C: Combat & Progression - Full D&D 5e combat, monsters, loot, leveling | |||
| 2C.1 | Monster Manual - src/campaign/monster-manual.js50+ SRD creature stat blocks (Goblin, Skeleton, Dragon, etc.). CR, AC, HP, abilities, actions, XP |
1 week | β Code Complete |
| 2C.2 | Encounter Builder - src/campaign/encounter-builder.jsCR-balanced encounter generation. Dynamic encounters from narrative. Integrates with existing Dynamic Difficulty |
3 days | β Code Complete |
| 2C.3 | Loot Engine - src/campaign/loot-engine.jsTreasure tables by CR, magic items (CommonβLegendary), attunement rules, gold/XP distribution, shop system |
3 days | β Code Complete |
| 2C.4 | Leveling System - Per-character XP tracking, milestone leveling option New HP, class features, spell slots, ability score improvements. Multi-class support (rule engine handles this) |
3 days | β Code Complete |
| Phase 2D: Polish & Advanced Features | |||
| 2D.1 | Session Persistence - Auto-save, manual save, resume, campaign journal JSON storage in data/campaigns/. Auto-save every N turns. Campaign recap for returning players |
1 week | β Code Complete |
| 2D.2 | Advanced DM Features - NPC relationships, weather/time, random encounters, dungeon generator, puzzle system | 1 week | π¨ Partial |
| 2D.3 | Campaign UI - Party dashboard, location map, quest log, NPC codex, combat tracker | 1 week | βͺ Planned |
| Module | What It Does | Campaign Reuse |
|---|---|---|
src/session/index.js (330 lines) |
Session model with mode:'storyline'|'campaign'|'digital_dm', players array, hostId, turnOrder, worldState, lobby state |
β Ready - no changes needed |
src/session/message-router.js (271 lines) |
DmMessage with targets[], types: narration, dice_result, combat_update, whisper, spectator_suggestion | β Whisper + spectator types exist |
src/rule-engine/ (7 modules, 108KB) |
D&D 5e: 12 classes, full SRD races, combat, stats, character sheets | β Player-count agnostic - works for 1-6 |
src/combat/combat-manager.js (438 lines) |
Initiative, multi-foe encounters, action economy, ENEMY_TEMPLATES | β Needs monster stat block expansion |
src/difficulty/dynamic-difficulty.js (370 lines) |
Rubber-band scaling: 70% fair, 20% power window, 10% challenge | β Works as-is |
src/coin-engine/index.js (428 lines) |
Categories: creativity/investigation/roleplay/combat/exploration, tier system | β Needs per-player tracking |
src/inventory/inventory.js (511 lines) |
Item definitions with combat effects, equipment slots | β Needs per-player isolation |
src/ai-dm/ (4 modules, 1,319 lines) |
LLM orchestration, context management, DM prompts | β οΈ Needs campaign-specific prompts |
src/character/ (4 modules, 1,505 lines) |
Character model, service, portrait gen | β οΈ Needs multi-character per session |
src/dice/ (4 modules, 899 lines) |
All die types, 207 tests passing | β Works as-is |
1. World State as JSON - Campaign state stored in data/campaigns/{id}.json. Same pattern as adventure sessions. Easy to save/load/share. No database dependency for beta.
2. LLM Context Window Management - Sliding window for long campaigns. Keep last N exchanges in full, summarize older context. Only send relevant location/NPC data, not entire world. ~8K tokens system prompt, ~4K conversation, ~2K response.
3. DM Response Parsing - Structured tags alongside narration: [DICE_ROLL: ability_check, DC 15, Wisdom], [COMBAT_START: goblin x4], [QUEST_UPDATE: quest_id, status], [NPC_ATTITUDE: npc_id, change].
4. Multiplayer Message Routing - All messages through MessageRouter. Narration β broadcast. Whisper β specific player. Dice result β roller + summary. Combat update β all. Suggested actions β current player only.
5. No New Dependencies - Everything needed is already in the tree: Fastify, uuid, ws, fastify-sse-v2. Only external dependency is the LLM API (already configured).
| File | Purpose |
|---|---|
src/campaign/index.js | Campaign session manager (main entry) |
src/campaign/world-builder.js | Procedural world generation |
src/campaign/quest-engine.js | Quest creation/tracking/completion |
src/campaign/encounter-builder.js | Combat encounter generation |
src/campaign/monster-manual.js | SRD monster stat blocks |
src/campaign/turn-manager.js | Turn order and initiative |
src/campaign/loot-engine.js | Treasure/magic item generation |
src/campaign/npc-engine.js | NPC personality/dialogue/memory |
src/campaign/campaign-prompts.js | DM system prompts for campaigns |
src/campaign/session-persistence.js | Save/resume functionality |
src/campaign/themes/ | World templates (gothic-horror, sword-coast, noir-mystery, wilderness) |
src/api/campaign-routes.js | Campaign API endpoints |
public/campaign.html | Campaign Mode frontend |
data/campaigns/ | Saved campaign state files |
| Phase | Scope | Effort | Dependencies |
|---|---|---|---|
| 2A: Foundation | Campaign session, world builder, DM prompts, API | 2-3 weeks | None - builds on existing |
| 2B: Multiplayer | Lobby, turn manager, whispers, per-player state | 2-3 weeks | Phase 2A complete |
| 2C: Combat | Monster manual, encounters, loot, leveling | 2-3 weeks | Phase 2A (can parallel with 2B) |
| 2D: Polish | Persistence, advanced DM, UI | 2-3 weeks | Phases 2A+2B+2C complete |
| Total | 8-12 weeks for all three game modes | Phase 2A alone: 2-3 weeks (Campaign Mode foundation) | |
| Theme | Description | Starting Location |
|---|---|---|
| Gothic Horror | Dark villages, haunted forests, vampire lords | A crumbling village on the edge of a cursed forest |
| Sword Coast | Classic D&D frontier, dungeons, dragons | A bustling trade town at a crossroads |
| Noir Mystery | Urban intrigue, thieves guilds, political corruption | A rain-soaked city with a dark underbelly |
| Wilderness Expedition | Exploration, ruins, ancient civilizations | An expedition camp at the edge of uncharted territory |
| Custom | Player describes a setting, AI generates from description | Player-defined |
See the complete implementation plan with data models, API routes, testing strategy, and risk mitigations at:
/workspace/the-binding/docs/campaign-mode-plan.md
Complete stat blocks for all SRD monsters. Search, filter by CR or type, click any creature for full details.
Loading monster database...
Phase II: Full AI Dungeon Master for open-ended D&D 5e sessions. Status: 95% Complete β 16 modules built (4,974 lines), 274 tests passing.
Core Concept: Unlike Adventure Mode (curated book-based scenes), Campaign Mode is sandbox - the AI DM creates worlds, NPCs, quests, and combat encounters on the fly, responding to player actions in real time. The Phase 1 architecture was designed for this from Day 1. Campaign Mode is purely additive - no rewrites.
| Mode | Description | Players | Status |
|---|---|---|---|
| Storyline Mode | Book-based adventures - Dracula, Frankenstein, Holmes. Curated scene graphs, narrative bug-hunted. | 1 | β Built |
| Campaign Mode | Open-ended sandbox - AI DM generates worlds, NPCs, quests. Multi-player (2-6). | 2-6 | π¨ In Progress |
| Digital DM Mode | General-purpose AI DM - any TTRPG system, any setting. Maximum flexibility. | 1-6 | π‘ Scaffolding |
| Module | What It Does | Campaign Reuse |
|---|---|---|
| Session Model | Session container with mode field, players array, turnOrder | β Already has campaign mode enum, lobby state |
| Message Router | DmMessage with targets[], types: narration/dice_result/combat_update/whisper | β Whisper + spectator types exist |
| Rule Engine (7 modules) | D&D 5e: 12 classes, full SRD races, combat, stats | β Player-count agnostic - works for 1-6 |
| Combat Manager | Initiative, multi-foe encounters, action economy | β Needs monster stat block expansion |
| Dynamic Difficulty | Rubber-band scaling: 70% fair, 20% power, 10% challenge | β Works as-is |
| Monster Manual | 334 SRD creature stat blocks, CR-balanced encounters | β DONE - see Monsters tab |
| Coin Engine | Categories: creativity/investigation/roleplay/combat/exploration | β Needs per-player tracking |
| AI DM Service | LLM orchestration, context management, DM prompts | β οΈ Needs campaign-specific prompts |
| New Module | Purpose | Priority |
|---|---|---|
campaign/index.js | Campaign session manager - mode:'campaign', world state, party state | P0 |
campaign/world-builder.js | Procedural world generation - locations, NPCs, quest hooks | P0 |
campaign/quest-engine.js | Quest creation, tracking, completion | P0 |
campaign/campaign-prompts.js | DM system prompts for open-ended sandbox play | P0 |
campaign/encounter-builder.js | Combat encounter generation from monster stat blocks | P1 |
campaign/turn-manager.js | Turn order, initiative, action resolution for parties | P1 |
campaign/npc-engine.js | NPC personality, dialogue, memory, relationships | P1 |
campaign/loot-engine.js | Treasure generation, magic item drops | P2 |
campaign/session-persistence.js | Save/resume campaign state to disk | P1 |
api/campaign-routes.js | Campaign-specific API endpoints | P0 |
| Phase | Scope | Timeline | Key Deliverable |
|---|---|---|---|
| 2A: Foundation | Campaign session, world builder, DM prompts, API | Weeks 1-3 | Single player starts a campaign, AI DM generates a world, player explores |
| 2B: Multiplayer | Lobby, turn manager, whispers, per-player state | Weeks 4-6 | 2-6 players join a campaign with host/spectator roles |
| 2C: Combat | Encounters, loot, leveling (parallel with 2B) | Weeks 7-9 | Full D&D 5e combat with initiative, spell slots, loot drops |
| 2D: Polish | Persistence, advanced DM features, UI | Weeks 10-12 | Auto-save, NPC relationships, party dashboard, combat tracker |
Total: 8-12 weeks for full Campaign Mode. Phase 2A alone (single-player campaign) is deliverable in 2-3 weeks and provides immediate value.
| Theme | Description | Starting Location |
|---|---|---|
| Gothic Horror | Dark villages, haunted forests, vampire lords | A village on the edge of a cursed forest |
| Sword Coast | Classic D&D frontier, dungeons, dragons | A bustling trade town at a crossroads |
| Noir Mystery | Urban intrigue, thieves guilds, political corruption | A rain-soaked city with a dark underbelly |
| Wilderness Expedition | Exploration, ruins, ancient civilizations | An expedition camp at uncharted territory |
src/campaign/ - index.js, world-builder.js, quest-engine.js, encounter-builder.js, monster-manual.js, turn-manager.js, loot-engine.js, npc-engine.js, campaign-prompts.js, session-persistence.js
src/campaign/themes/ - gothic-horror.js, sword-coast.js, noir-mystery.js, wilderness.js
src/api/campaign-routes.js - Campaign API endpoints
data/campaigns/ - Saved campaign state files
| Risk | Impact | Mitigation |
|---|---|---|
| LLM context overflow in long campaigns | High | Sliding window + world state compression + summarize old events |
| AI DM generates inconsistent world state | High | Strict JSON schema for world updates, validate on parse |
| Multiplayer turn management feels slow | Medium | Fast turn timers, narrative mode outside combat |
| LLM cost per session is high | Medium | Optimize prompt size, cache world state, use cheaper models for NPC dialogue |
All live test environments and project resources in one place. Bookmark this page.
| Environment | URL | Status | Notes |
|---|---|---|---|
| Game App (Render) | the-binding.onrender.com | Live | Main game server - signup, character creation, adventure play |
| Docs Hub (Paxeer Cloud) | the-binding-docs.cloud.hyperpaxeer.com | Live | This site - all specs, status, tools, monsters, campaign plan |
| Dice Roller (Direct) | #dice tab | Live | 3D physics dice roller (Three.js + Cannon.js) |
| Monster Database | Monsters tab above | Live | 334 SRD 5.1 creatures - search, filter, detail view |
| Resource | URL | Notes |
|---|---|---|
| GitHub Repository | github.com/rlaw22/the-binding | Full source code - game engine, rule engine, dice, monsters, manifests |
| Render Dashboard | dashboard.render.com | Deployment management for the-binding.onrender.com |
| Paxeer Cloud (paxc) | CLI tool - paxc deploy the-binding-docs | Deployment for this docs site |
| Book | Acts | Scenes | Status | Review File |
|---|---|---|---|---|
| Dracula | 5 | 25 | β Bug Hunt Done | REVIEW-dracula-acts4-5.md, REVIEW-frankenstein.md |
| Frankenstein | 5 | 25 | β Bug Hunt Done | REVIEW-frankenstein.md |
| Sherlock Holmes | 5 | 25 | β Bug Hunt Done | REVIEW-holmes.md |
Bug Hunt Results: 101 bugs found across all 75 scenes. 29 HIGH + 31 MEDIUM fixed. See review files in repo root.
| File | Location | Contents |
|---|---|---|
| Game Design Decisions | docs/game-design-decisions.md | Core design philosophy, 3 game modes, replayability, Shoppe, difficulty scaling, NFTs, coin economy |
| Campaign Mode Plan | docs/campaign-mode-plan.md | Full implementation plan for Phase II - world builder, quest engine, multiplayer, combat |
| Monster Database | docs/monster-database.md | 334 SRD creatures schema, CR tables, encounter building rules |
| Scene System Design | docs/scene-system-design.md | Scene engine architecture, dependency graphs, exit pressure |
| Multiplayer Roadmap | docs/multiplayer-roadmap.md | Host/spectator β full co-op β campaign mode progression |
| Logo & Art Brief | docs/logo-art-brief.md | Visual identity, logo specs, art direction |
| STATUS.md | STATUS.md | Live project status tracker (updated each session) |
| Adventure Catalog | docs/adventure-catalog.md | 12 adventures cataloged (5 WotC + 7 third-party), level-tagged, integration priority ranked |
| Lost Mine Manifest | docs/lmop-adventure-manifest.md | Full scene graph for Lost Mine of Phandelver β 4 acts, 37 scenes, all NPCs, encounters, quest lines |
| Phase 2 Tracker | docs/phase2-tracker.md | Live progress tracker for all Phase 2 work β 274 tests, 16 modules, daily log, blockers |
| Suite | File | Tests | Status |
|---|---|---|---|
| Phase 1 (Core Engine) | tests/phase1.test.js | ~19KB | β Passing |
| Phase 2 (Advanced) | tests/phase2.test.js | ~12KB | β Passing |
| Dice Logic | tests/dice.test.js | 207 tests | β 327/327 Passed |
| Smoke Test | smoke_test.py | E2E | π¨ Partial |
| Phase 2A Campaign | tests/phase2-campaign.test.js | 56 tests | β 56/56 Passing |
| Phase 2B/2C/2D | tests/phase2bcd.test.js | 124 tests | β 124/124 Passing |
| Phase 2 Extended | tests/phase2-extended.test.js | 91 tests | β 91/91 Passing |
| E2E Integration | tests/phase2-e2e.test.js | 3 tests | β 3/3 Passing |
| Total | 274 tests | β All Passing |