# Creature Clash PRD, brand kit & Jira board

> A real PRD, research, brand kit, engineering brief, roadmap and 47-story Jira board for Creature Clash, generated by Murmur from a 2m 56s voice memo in 9m 22s.

Canonical: https://www.trymurmur.studio/examples/creature-clash
Last updated: 2026-11-15

A private single-player prototype testing whether a classic stat-category duel, type triangle, and rule-bending abilities can out-strategize the card-based and gesture-based combat that current mobile creature collectors ship with.

| Voice memo | Run time | Competitors | PRD features | Jira epics | Jira stories |
|---|---|---|---|---|---|
| 2:56 | 9m 22s | 2 | 14 | 12 | 47 |

Real Murmur run · Games. Recorded Sep 25, 2026 · run Sep 25, 2026 · published with the owner's permission. Links into the owner's Atlassian site and raw search results are removed. Run with Jira and Confluence on, before they became optional (13 Nov 2026).

## 1. The voice memo

2:56 of talking. This is the only input Murmur got. Full transcript.

> So, uh, Poké Clash or Creature Clash is a mobile creature battling game built around the fantasy of becoming the greatest trainer alive. You start with a single companion creature and set out on a journey, walking routes, catching wild creatures to grow your collection, and battling other trainers along the way. Every battle is a duel of stats. Each creature is scored against a handful of categories like attack, attack, defense, speed, and special powers. And in battle, you pick which category to fight on turn by whittling down your opponent's health. On top of the raw numbers sit 2 layers of depth. First, elemental types— fire, water, grass, electric, and rock— that beat the— that beat and lose to each other in a rock-paper-scissors triangle. So your strongest strat can be neutralized by a bad matchup, and category choice becomes a real read against your opponent. Second unique abilities each creature carries bend the rules of the duel: stealing a strat, forcing a category, shrugging off a type disadvantage. This is of course V3. The world is structured as a series of gems— gyms, G-Y-M-S, gyms. Each themed around a type and guarded by a leader. Beat the leader, earn a badge, and after a hard-won victory of a 3v3 duel, you even get to swap one of your creatures for one of theirs. Collect all the badges, top the leaderboard, and prove you're the best. The long-term vision is online multiplayer where trainers battle each other directly, but the heart of it is a single-player story mode you can lose yourself in. In the initial phase of project, the multi— we would go with the single-player story mode where the other trainers would be AI-powered. This is a passion project first, an idea that's been kicking around for years, and this is about finally building it as interactive and as fun as it can possibly be. On strategy, the plan is to prototype privately against real creature data to nail down whether the loop is generally fun, even without worrying about art or originality. And only later, if the game proves worth it, invest in a set of original creatures. For anything that goes public, validate the fun first, own the world second. Another feature that we should be adding in this would be XP and progression. With each battle, with each duel of a creature, with each winning, losing, or drawing, of a creature, the creature would be earning XP, experience points, and those experience points would then be used by their trainer to increase their categories. Any of the categories could be used by that. So yeah, that's all.

## 2. Competitor map

### Market summary

The competitive set is small but directly adjacent to the proposed idea: mobile creature-collector games that borrow heavily from the Pokémon formula (hatching, evolving, elemental type advantages, and a trainer journey). Creature Clash: Echoes is the closest analog, already live on iOS and Android as a free-to-play card-based roguelite with a 4-element triangle, evolution, and light narrative, though it reports very low download numbers on Google Play. Poke Clash is an older (2018-era) mobile title using gesture-drawing combat rather than stat-based dueling, with a simpler catch-and-train loop. Neither competitor is stated to offer a persistent open-world gym/badge structure, direct trainer-vs-trainer swapping of creatures, or player-vs-player online multiplayer, leaving room for differentiation in structured progression and social battling.

### Competitors (2)

#### [Creature Clash: Echoes (CYBERWARD, LLC.)](https://creatureclashgame.com/)

A monster card roguelite with Pokémon-style collection depth, strategic card combat, and a story-driven corrupted world, designed from the ground up for mobile.

Pricing: Free to download and play with optional in-app purchases (energy packs, bundles, Champion's Pass subscription); stated as no pay-to-win

Strengths:
- Already live on App Store and Google Play
- Clear elemental-triangle strategy layer similar to proposed idea
- Strong narrative/lore hook layered onto collection mechanics
- No pay-to-win positioning may build trust
- Evolution and progression systems already implemented

Weaknesses:
- Uses card-based combat rather than direct stat-category duels
- Roguelite run structure (losing resets zone runs) rather than persistent open-world journey/gyms
- No stated multiplayer/PvP battling between trainers
- Only 10+ downloads reported on Google Play, suggesting limited traction
- Only 4 elements/types vs. proposed 5 (fire, water, grass, electric, rock)

#### [Poke Clash: Monster Hunter (vCubegame)](https://apkpure.com/poke-clash-monster-hunter/com.vcube.pokeclash)

A fast-paced monster battling and catching game using gesture-drawing controls, framed around becoming the best monster hunter.

Strengths:
- Distinct, novel gesture-drawing combat mechanic differentiates it from stat-duel games
- Simple, catch-and-battle loop similar to genre conventions
- Has boss/mining mode for added challenge variety

Weaknesses:
- Combat is based on drawing/gesture matching rather than strategic stat-category or type decisions, so lower strategic depth
- Last updated 2018, suggesting the game may be outdated/unsupported
- No stated gym/badge structure or trainer-vs-trainer swapping mechanic
- No stated multiplayer battling, only friend leaderboard racing

### Table stakes

- Creature collecting/catching mechanic
- Elemental type advantage system (rock-paper-scissors style triangle)
- Creature evolution or stat growth over time
- Egg hatching or similar creature acquisition ritual
- Free-to-play mobile release with optional in-app purchases
- A journey/adventure framing with a story or world to progress through

### Where to differentiate

- Persistent gym/badge structure with named leaders guarding themed types, not seen as stated in competitor feature lists
- Post-gym-battle creature swap mechanic between trainer and leader, not offered by either competitor
- Direct stat-category duel system (attack/defense/speed/special picked turn-by-turn) versus card-hand or gesture-based combat used by competitors
- Unique creature abilities that bend duel rules (stealing a strat, forcing a category, negating type disadvantage) — deeper ability layer than competitors' Marks/Momentum systems
- XP-driven trainer-directed stat allocation (player chooses which category to grow) rather than automatic evolution stages
- Long-term online trainer-vs-trainer multiplayer battling, which neither competitor states as a feature
- Open-world route-walking exploration structure vs. procedurally generated roguelite runs

### Positioning

Where existing mobile creature collectors lean on card-based roguelite combat (Creature Clash: Echoes) or gesture-drawing capture mechanics (Poke Clash), this product differentiates with a classic stat-duel battle system layered with type match-ups and rule-bending unique abilities, wrapped in a persistent gym-and-badge journey with trainer-vs-leader creature swaps and, eventually, direct online PvP — validating the core duel loop first before investing in original creature art.

## 3. Product requirements document

**One-liner:** A private single-player prototype testing whether a classic stat-category duel, type triangle, and rule-bending abilities can out-strategize the card-based and gesture-based combat that current mobile creature collectors ship with.

### Problem

Trainers who grew up on Pokémon-style games want the fantasy of raising a creature, out-thinking a rival, and proving mastery through direct head-to-head duels — but today they either play nostalgia-driven originals or settle for mobile alternatives that reframe combat as card-hand play (Creature Clash: Echoes) or gesture-drawing minigames (Poke Clash), diluting the read-your-opponent tension of picking a stat category under a type disadvantage. The founder has held this idea for years and currently has no way to test it beyond imagination; there is no build yet, private or public, and no evidence the stat-duel-plus-abilities loop is actually fun before investing in original art or a live release. Existing competitors also lack a persistent gym/badge journey or a post-battle creature swap, meaning even players drawn to the genre have no mobile product offering structured trainer-vs-leader progression with tangible stakes for winning.

### Target user

The founder themself, acting as the sole private playtester of a personal passion project, prototyping to determine if the core battle loop is fun before showing it to anyone else.

### Must have (9)

- **Starter creature & wild catching**: Player begins with a single companion creature and can catch additional wild creatures encountered while walking routes.
  - Why: Named as the opening hook of the journey in the transcript and is table-stakes for the genre per competitor analysis.
- **Stat-category duel system**: Battles are turn-based duels where each side picks a category (attack, defense, speed, special) to fight on, whittling down opponent HP.
  - Why: This is the heart of the idea as described by the founder and the product's core differentiator from competitors' card- and gesture-based combat.
- **Elemental type triangle**: Five types — fire, water, grass, electric, rock — beat and lose to each other in a rock-paper-scissors pattern that modifies duel outcomes.
  - Why: Explicitly specified by the founder as the first depth layer on top of raw stats, and type triangles are table stakes across all competitors.
- **Unique creature abilities**: Each creature carries an ability that bends duel rules — stealing a strat, forcing a category, or negating a type disadvantage.
  - Why: Founder describes this as the second core depth layer; research flags it as a whitespace deeper than competitors' Marks/Momentum systems.
- **Gym/badge structure with leaders**: World is organized into gyms, each themed around a type and guarded by a leader; beating a leader awards a badge.
  - Why: Directly specified in the transcript as the world's structure and identified as a differentiation opportunity neither competitor offers.
- **Post-gym 3v3 creature swap**: After winning a 3v3 duel against a gym leader, the player swaps one of their creatures for one of the leader's.
  - Why: Explicitly described by the founder as a reward mechanic and confirmed by research as a gap no competitor addresses.
- **XP and trainer-directed stat growth**: Creatures earn XP from every battle outcome (win, lose, or draw), which the trainer allocates across any stat category.
  - Why: Founder explicitly calls this out as a feature to add, and research flags player-directed stat allocation as a gap versus competitors' automatic evolution stages.
- **AI-powered single-player trainers**: In this initial phase, all opposing trainers encountered on routes and in gyms are AI-controlled rather than live players.
  - Why: Transcript explicitly scopes phase one to single-player story mode with AI trainers, deferring multiplayer.
- **Prototype on real creature data, no original art**: Build and balance the loop using existing/placeholder creature data and stats rather than original designs.
  - Why: Founder's stated strategy: validate the fun of the loop privately before investing in original creatures or art.

### Should have (2)

- **Persistent open-world route exploration**: Routes and gyms form a continuous walkable world state that persists between sessions, rather than resetting.
  - Why: Creature Clash: Echoes resets progress via procedurally generated roguelite runs on defeat; a persistent journey better matches the founder's route-walking framing and is a stated differentiation opportunity.
- **Badge-linked trainer leaderboard**: Leaderboard ranks the player against tracked AI trainers by badges earned, not just battles won.
  - Why: Poke Clash offers only a simple friend-ranking leaderboard; tying ranking to badge/gym progression better reflects the founder's 'top the leaderboard, prove you're the best' framing.

### Could have (3)

- **Online trainer-vs-trainer multiplayer**: Direct PvP battles between real trainers using the same stat-duel, type, and ability system.
  - Why: Founder names this as the long-term vision but explicitly defers it past the initial phase; research confirms neither competitor offers stated PvP.
- **Original creature roster & artwork**: Replace placeholder/real creature data with an original, owned set of creature designs and art.
  - Why: Founder's own stated sequencing: invest in original creatures only after the loop proves fun, so it belongs later than V1.
- **Expanded ability library**: Grow the pool of unique, rule-bending abilities beyond the initial launch set once the base loop is validated.
  - Why: Research identifies the ability layer as deeper than competitors' systems and worth expanding once core viability is proven.

### Won't have (7)

- **Monetization / in-app purchases**: No energy systems, currency packs, or subscription passes in this version.
  - Why: This is a private prototype validating fun first, not a public release, so monetization is out of scope per the founder's stated strategy.
- **Creature trading between players**: No mechanism to trade creatures with other trainers.
  - Why: Offered by Creature Clash: Echoes but not mentioned by the founder and irrelevant to a single-player private prototype.
- **Egg hatching acquisition ritual**: No egg-based creature acquisition system.
  - Why: The founder specifies catching wild creatures on routes as the acquisition method, not hatching, explicitly diverging from both competitors' egg systems.
- **Procedurally generated roguelite run structure**: No procedurally generated maps or run-based resets on defeat.
  - Why: Competitor Creature Clash: Echoes uses this structure; the founder's route-walking, persistent-world framing explicitly rejects it.
- **Card-based or gesture-drawing combat**: No card-hand mechanics or gesture/shape-drawing inputs for battling.
  - Why: Both competitors use these mechanics; the founder's stat-category duel system is the explicit alternative being tested.
- **Public app store release & account system**: No App Store/Google Play publishing, sign-in, or cloud save/backup in this phase.
  - Why: Transcript frames this explicitly as a private prototype to validate fun before any public investment.
- **Daily arenas, equippable relics, and cosmetic variants**: No Proving-Grounds-style daily challenge modes, equippable relic items, or shiny/rare cosmetic creature variants.
  - Why: These are extra systems from Creature Clash: Echoes that add scope without testing the core duel loop the founder wants validated first.

### Success metrics

| Metric | Target |
|---|---|
| Story-mode completion rate | ≥70% of prototype playtest sessions reach the final gym badge within the first 30 days of internal testing |
| Playtest session frequency | ≥3 play sessions per week sustained across a 4-week private playtest period |
| Self-reported fun score (1-5 scale) | Average score of ≥4/5 collected across all playtest sessions within the first 30 days |
| Category-choice variety per battle | ≥3 distinct stat categories used on average per duel, measured across the first 100 test battles within 60 days |

### Non-goals

- Not building or publishing to app stores in this phase — remains a private prototype.
- Not implementing online multiplayer or live PvP battling in V1.
- Not designing or commissioning original creature art or IP for this phase.
- Not building any monetization, account, or cloud-sync systems.
- Not supporting more than the five specified elemental types at launch.

### Risks

- The stat-duel-plus-abilities loop may not prove meaningfully more fun than card- or gesture-based alternatives once actually played, invalidating the core bet.
- Balancing five types plus per-creature unique abilities and trainer-directed XP allocation could produce dominant strategies that flatten the intended 'read your opponent' tension.
- Using real/existing creature data during prototyping carries IP risk if the build is ever shown publicly or shared before original creatures are developed.
- As a solo passion project, the combined scope of gyms, swap mechanics, abilities, and XP allocation risks stalling before the core loop is even validated.

### Open questions

- How many gyms/badges constitute a complete V1 story mode for playtesting purposes?
- What threshold of fun/completion data triggers the decision to invest in original creature art?
- Should XP-driven stat allocation be fully player-controlled per category, or guided with suggested distributions?
- Which existing creature dataset will be used for prototyping, and what are the legal constraints on using it even privately?

## 4. Brand kit

**Creature Clash**: Pick your category. Prove the loop.

### Palette

- Primary: #1F2A44
- Secondary: #2F8F8B
- Accent: #E8622C
- Neutral: #B9C0CC

### Semantic colors

- error: #C4432E
- success: #3FA66B
- warning: #E0A62E

### Typography

Headings Space Grotesk / body Inter / mono JetBrains Mono

### Brand values

- Strategic tension over spectacle
- Prototype honesty — test fun before polish
- Read-your-opponent depth
- Structured mastery through gyms and badges
- Solo-builder pragmatism

### Name notes

- Could shorten internally to 'Duel Loop' for day-to-day builds and playtest logs.
- Alt working title 'Clash Core' if a leaner internal codename is preferred over the full franchise-style name.

### Logo direction

- Form: A hexagonal badge shield containing an abstract triangular loop motif
- Style: Minimal strategic emblem, badge-inspired, flat and geometric — reads as an internal dev/prototype mark rather than a consumer game logo
- Symbol concept: A closed triangular arrow-loop (referencing the type triangle and the repeating duel/category-pick cycle) set inside a gym-badge silhouette, suggesting both strategy and progression
- Iconography: Flat geometric line icons with rounded joins, badge and shield motifs for progression states, triangular arrow forms for type/category relationships, limited two-tone fills using palette accents, no illustrative or mascot-style artwork

Avoid: No cute creature mascots or silhouettes resembling existing franchises; No card-hand or playing-card iconography; No gesture/swipe/finger-drawing symbols; No cartoon or chibi styling; No literal monster illustrations

## 5. Tech design

### Overview

A private, single-player web prototype for validating a stat-category duel loop before any art or public release is built. There are no other players, no accounts, and no cloud sync in scope, so the architecture is deliberately local-first: a Next.js client running entirely in the founder's browser, with all creature, battle, and playtest data stored in an on-device SQLite database. Nothing about the duel, the world, or the AI trainers depends on a server, so no backend API is built. The one thing this project must get right is the turn-resolution logic for the stat duel (type triangle + abilities + growth), so that component is designed first and in depth; everything else (world navigation, roster growth, gym/badge progression, AI opponents, telemetry) is built around feeding it clean inputs and recording its outputs for balance analysis.

### Data flow

On launch, the Next.js client loads the Creature & Content Data Layer and the founder's save file from local SQLite. The player navigates the route/gym map (World Route Navigation); encountering a wild creature or trainer starts a Battle row. Each round, the player picks a category in the UI while the AI Trainer Decision Engine picks for the opponent; both choices go into the Duel Battle Engine, which applies the type chart and any ability effects, resolves HP deltas, and appends a BattleTurn row. When a battle ends, Creature Roster & Growth awards XP and prompts stat allocation (written as an idempotent XPAllocation); if it was a deciding gym battle, Gym & Badge Progression issues a Badge and runs the idempotent GymSwap. All writes land in the local SQLite database — nothing is sent to a server. Playtest Telemetry logs the session and the founder periodically exports the SQLite file/JSON to review against the success metrics.

### Tech stack

| Layer | Choice |
|---|---|
| frontend | Next.js (App Router) as a local-first single-page client; no SSR or multi-tenant needs for a solo private prototype. |
| backend | No server/API layer. All game, duel, and progression logic runs client-side in the browser — this is a single local player with no accounts or multiplayer, so a backend would add infrastructure the PRD explicitly excludes. |
| database | Client-side SQLite via sql.js (WASM), persisted to the browser's OPFS/IndexedDB on the founder's own device. No cloud database, so no game or playtest data is ever transmitted anywhere — matches the PRD's explicit 'no cloud sync' non-goal. |
| auth | Not required. Single local player, no account system per PRD non-goals; the app opens straight into the on-device save file. |
| llm | Not required. AI trainers use deterministic, rule-based heuristics (e.g. counter the player's last category, lean into a type advantage, protect low-HP creatures) rather than a generative model, so battle outcomes stay reproducible for the seeded-RNG replay requirement and the 'category-choice variety' success metric. All stat math, type-triangle multipliers, XP, and swap logic are deterministic code, never model output. |
| infra | No cloud infra required to run the prototype; launched via local dev/build on the founder's machine. Optional unlisted Vercel static deploy only to test on a phone browser — it would serve JS/asset bundles only, never game data, keeping the 'no public release' non-goal intact. |
| devtools | TypeScript, ESLint/Prettier as standard; Vitest unit tests specifically around the Duel Battle Engine's round-resolution function, since its correctness and determinism are what the whole validation effort depends on. |

### Components (9)

- **Duel Battle Engine**: The core of the product. Inputs per round: the two active creatures (stats after growth allocation, current HP, ability, elemental type), the category each side picks that round (attack/defense/speed/special), and a seeded RNG value for the battle. Outputs: which side wins the round, the HP delta applied, whether an ability fired and what it changed, and an immutable BattleTurn log row. Category choices are revealed simultaneously, the type-triangle multiplier is applied, abilities resolve in a fixed documented order (steal > force > negate-disadvantage > other), and the same battle_id, rng_seed and choice sequence always reproduce the same outcome, so balance bugs are reproducible.
- **Ability Rules Registry**: Defines the launch set of unique creature abilities as structured trigger/effect data (steal-category, force-category, negate-type-disadvantage, etc.) that the Battle Engine reads and resolves; keeps rule-bending logic declarative and testable rather than hard-coded per creature.
- **AI Trainer Decision Engine**: Deterministic, rule-based (non-LLM) heuristics that choose a category for every AI-controlled opponent — wild creatures, route trainers, and gym leaders — e.g. counter the player's last category, lean into a type advantage, or protect a low-HP creature. Kept deterministic so duel outcomes stay reproducible for balance testing.
- **Creature Roster & Growth**: Tracks each owned CreatureInstance's stats, HP, and ability; awards XP after every battle (win, lose, or draw) and exposes the trainer-directed allocation UI that lets the player assign earned XP to any stat category, writing an idempotent XPAllocation record per battle per creature.
- **Gym & Badge Progression**: Models the ordered sequence of gyms, each with a type theme and a leader trainer; issues a Badge on a 3v3 gym win and runs the post-gym creature swap (player gives one creature, receives one of the leader's), recorded as a single idempotent GymSwap transaction keyed to the deciding battle.
- **World Route Navigation & Wild Catching**: Renders the persistent, walkable route/gym map, resolves wild encounters from each route's weighted species table, and handles the starter-selection and catch flow that adds a new CreatureInstance to the roster.
- **Creature & Content Data Layer**: Loads and serves the placeholder/real creature species, base stats, types, and ability definitions used for prototyping (per the founder's stated strategy of validating the loop before original art); isolated behind one module so the real dataset can later be swapped for original creatures without touching the Battle Engine.
- **Local Persistence & Save Layer**: Owns the on-device SQLite database (schema below): reads/writes all game state, exposes save export/import as a file so the founder can back up a playtest run manually, since no cloud sync is in scope.
- **Playtest Telemetry & Leaderboard**: Logs PlaytestSession records (duration, self-reported 1–5 fun score, battles played) and derives the four success metrics (completion rate, session frequency, fun score, category variety) plus a simple badge-count leaderboard against the tracked AI trainers, all computed locally from the SQLite tables.

### Data models (15)

#### Trainer

| Field | Type |
|---|---|
| id | uuid |
| name | text |
| role | text |
| gymId | uuid \| null |
| decisionProfile | text \| null |
| createdAt | timestamp |

- Trainer has many CreatureInstance (as owner)
- Trainer has many Badge (as earner, for leaderboard)
- Trainer 1:1 Gym (as leader)

#### ElementType

| Field | Type |
|---|---|
| id | text |
| name | text |

- ElementType referenced by Species, Gym, Route, TypeEffectiveness

#### TypeEffectiveness

| Field | Type |
|---|---|
| attackerType | text |
| defenderType | text |
| multiplier | numeric |

- Composite key (attackerType, defenderType)

#### Ability

| Field | Type |
|---|---|
| id | uuid |
| name | text |
| description | text |
| triggerType | text |
| effectType | text |
| effectParams | jsonb |

- Ability referenced by Species.abilityId and CreatureInstance.abilityId
- Ability referenced by BattleTurn.abilityTriggeredId

#### Species

| Field | Type |
|---|---|
| id | uuid |
| name | text |
| primaryType | text |
| baseAttack | int |
| baseDefense | int |
| baseSpeed | int |
| baseSpecial | int |
| abilityId | uuid |
| catchRate | numeric |
| isLeaderExclusive | boolean |
| sourceNote | text |

- Species has many CreatureInstance
- Species has many RouteEncounter

#### CreatureInstance

| Field | Type |
|---|---|
| id | uuid |
| speciesId | uuid |
| ownerTrainerId | uuid |
| nickname | text \| null |
| level | int |
| xpTotal | int |
| attackStat | int |
| defenseStat | int |
| speedStat | int |
| specialStat | int |
| currentHp | int |
| maxHp | int |
| abilityId | uuid |
| teamSlot | int \| null |
| caughtAt | timestamp \| null |
| createdAt | timestamp |

- CreatureInstance belongs to Species and Trainer
- CreatureInstance referenced by BattleTurn, XPAllocation, GymSwap

#### Gym

| Field | Type |
|---|---|
| id | uuid |
| name | text |
| typeTheme | text |
| leaderTrainerId | uuid |
| sequenceOrder | int |
| badgeName | text |

- Gym has one leader Trainer
- Gym has many Badge
- Gym has many GymSwap via Battle

#### Badge

| Field | Type |
|---|---|
| id | uuid |
| trainerId | uuid |
| gymId | uuid |
| earnedAt | timestamp |

- Badge belongs to Trainer and Gym
- unique (trainerId, gymId)

#### Route

| Field | Type |
|---|---|
| id | uuid |
| name | text |
| sequenceOrder | int |
| typeTheme | text \| null |

- Route has many RouteEncounter
- Route referenced by Battle.routeId

#### RouteEncounter

| Field | Type |
|---|---|
| id | uuid |
| routeId | uuid |
| speciesId | uuid |
| encounterWeight | numeric |

- RouteEncounter belongs to Route and Species

#### Battle

| Field | Type |
|---|---|
| id | uuid |
| kind | text |
| routeId | uuid \| null |
| gymId | uuid \| null |
| playerTrainerId | uuid |
| opponentTrainerId | uuid \| null |
| rngSeed | bigint |
| winnerSide | text \| null |
| startedAt | timestamp |
| endedAt | timestamp \| null |
| idempotencyKey | text |

- Battle has many BattleTurn
- Battle has 0..1 GymSwap
- Battle has many XPAllocation

#### BattleTurn

| Field | Type |
|---|---|
| id | uuid |
| battleId | uuid |
| turnNumber | int |
| playerCreatureId | uuid |
| opponentCreatureId | uuid |
| playerCategory | text |
| opponentCategory | text |
| typeMultiplierPlayer | numeric |
| typeMultiplierOpponent | numeric |
| abilityTriggeredId | uuid \| null |
| hpDeltaPlayer | int |
| hpDeltaOpponent | int |

- BattleTurn belongs to Battle
- unique (battleId, turnNumber)
- source data for category-choice-variety metric

#### XPAllocation

| Field | Type |
|---|---|
| id | uuid |
| battleId | uuid |
| creatureInstanceId | uuid |
| xpEarned | int |
| allocatedStat | text \| null |
| allocatedAmount | int \| null |
| allocatedAt | timestamp \| null |
| idempotencyKey | text |

- XPAllocation belongs to Battle and CreatureInstance

#### GymSwap

| Field | Type |
|---|---|
| id | uuid |
| battleId | uuid |
| playerCreatureGivenId | uuid |
| leaderCreatureReceivedId | uuid |
| swappedAt | timestamp |

- GymSwap belongs to Battle (1:1)

#### PlaytestSession

| Field | Type |
|---|---|
| id | uuid |
| startedAt | timestamp |
| endedAt | timestamp \| null |
| durationSec | int \| null |
| funScore | int \| null |
| battlesPlayedCount | int |
| notes | text \| null |

- Standalone; aggregated for success-metric reporting

### SQL schema (excerpt)

```sql
CREATE TABLE type_effectiveness (
  attacker_type text NOT NULL REFERENCES element_types(id),
  defender_type text NOT NULL REFERENCES element_types(id),
  multiplier numeric NOT NULL,
  PRIMARY KEY (attacker_type, defender_type)
);

CREATE TABLE abilities (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  name text NOT NULL,
  trigger_type text NOT NULL,
  effect_type text NOT NULL,
  effect_params jsonb
);

CREATE TABLE trainers (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  name text NOT NULL,
  role text NOT NULL CHECK (role IN ('player','ai_route','gym_leader'))
);
```

### First engineering tasks

1. **Local schema & persistence setup**: Stand up the sql.js (SQLite/WASM) database from the schema above inside the browser, with OPFS/IndexedDB-backed storage, a migration runner, and a manual save-file export/import so a multi-week playtest isn't lost to browser storage eviction.
2. **Access setup (no-op, single local profile)**: Confirm the app boots directly into one local save with no login screen, and add a guard/lint rule preventing any accidental network or cloud-service calls from creeping into the client, per the no-accounts/no-cloud-sync non-goals.
3. **Local run & deploy setup**: Configure `next dev`/local static build as the primary way to run the prototype; wire an optional unlisted Vercel deploy for phone-browser testing that ships client assets only, with no data endpoints.
4. **Duel Battle Engine core**: Implement the deterministic round-resolution algorithm: category reveal, type-triangle multiplier lookup, fixed-order ability resolution, stat comparison, HP delta, and BattleTurn logging, backed by a seeded RNG and a full Vitest suite covering type/ability edge cases.
5. **Ability Rules Registry & launch ability set**: Build the trigger/effect data model for abilities (steal-category, force-category, negate-type-disadvantage) and author the initial roster's abilities against it, decoupled from the Battle Engine's core loop.
6. **AI Trainer Decision Engine**: Implement rule-based category-selection heuristics for wild encounters, route trainers, and gym leaders, with distinct difficulty/decision profiles per Trainer.decisionProfile.
7. **Creature Roster & XP Growth flow**: Build the XP-earning logic for every battle outcome (win/lose/draw) and the trainer-directed stat-allocation UI, writing one idempotent XPAllocation row per battle per creature.
8. **Gym/Badge progression & 3v3 swap**: Implement gym sequencing, badge issuance on a 3v3 gym win, and the post-gym creature swap as a single idempotent GymSwap transaction keyed to the deciding battle.
9. **World route navigation & wild catching**: Build the persistent route/gym map, weighted wild-encounter resolution from RouteEncounter data, starter selection, and the catch flow that creates a new CreatureInstance.
10. **Playtest telemetry & metrics export**: Log PlaytestSession records (duration, 1-5 fun score, battles played) and add an export view that computes the four PRD success metrics directly from the local SQLite tables.

### Open engineering questions

- How many gyms/badges constitute a 'complete' V1 story mode for playtesting purposes? (from PRD)
- What threshold of fun/completion data should trigger investment in original creature art? (from PRD)
- Should XP-driven stat allocation be fully free-form per category, or guided with suggested distributions? (from PRD)
- Which existing creature dataset will be used for prototyping, and what legal exposure exists even for a private, unreleased build? (from PRD)
- What is the exact round-resolution/damage formula and tie-break rule when both sides pick the same category or land equal adjusted stats? (this doc assumed 'difference in stat value, no damage on tie' — needs founder sign-off)
- When more than one ability could trigger in the same round, what is the intended precedence beyond the placeholder steal > force > negate order used here?
- Is browser OPFS/IndexedDB persistence reliable enough across a 4+ week playtest, or should the prototype be wrapped in a thin desktop shell (e.g. a Tauri build) for a guaranteed on-disk SQLite save file?
- Is the prototype meant to be played on a phone browser (touch input, small screen) during validation, or is desktop-only acceptable for this phase?

## 6. Confluence space

A new space named Creature Clash, with 6 pages:

- 01 - Product
- 02 - Brand & Identity
- 03 - Engineering
- 04 - Competitor Analysis
- 05 - Roadmap
- 06 - Research Notes

## 7. Roadmap

### Phase 1: 19 stories, 12 epics

- Engineering & Infrastructure
- Starter creature & wild catching
- Stat-category duel system
- Elemental type triangle
- Unique creature abilities
- Gym/badge structure with leaders
- Post-gym 3v3 creature swap
- XP and trainer-directed stat growth
- AI-powered single-player trainers
- Prototype on real creature data, no original art
- Persistent open-world route exploration
- Badge-linked trainer leaderboard

### Phase 2: 19 stories, 11 epics

- Starter creature & wild catching
- Stat-category duel system
- Elemental type triangle
- Unique creature abilities
- Gym/badge structure with leaders
- Post-gym 3v3 creature swap
- XP and trainer-directed stat growth
- AI-powered single-player trainers
- Prototype on real creature data, no original art
- Persistent open-world route exploration
- Badge-linked trainer leaderboard

### Phase 3: 9 stories, 9 epics

- Engineering & Infrastructure
- Stat-category duel system
- Unique creature abilities
- Gym/badge structure with leaders
- Post-gym 3v3 creature swap
- XP and trainer-directed stat growth
- AI-powered single-player trainers
- Prototype on real creature data, no original art
- Persistent open-world route exploration

## 8. Jira board

A new Jira project (CREAT67) created in the owner's own Atlassian site: 12 epics, 47 stories. P1 to P3 is the story's roadmap phase.

### CREAT67-1: Engineering & Infrastructure

- CREAT67-2 (P1): Stand up local sql.js schema, migrations, and persistence
- CREAT67-3 (P1): Build manual save-file export/import
- CREAT67-4 (P1): Configure no-login single-profile boot and network-call guard
- CREAT67-5 (P1): Configure local dev/build run and optional unlisted Vercel deploy
- CREAT67-6 (P3): Build playtest telemetry logging and metrics export view

### CREAT67-7: Starter creature & wild catching

- CREAT67-8 (P1): Build the starter selection screen and initial roster creation
- CREAT67-9 (P1): Implement weighted wild-encounter resolution
- CREAT67-10 (P2): Build the catch flow UI and success/fail resolution
- CREAT67-11 (P2): Build the route navigation map UI

### CREAT67-12: Stat-category duel system

- CREAT67-13 (P1): Implement the deterministic round-resolution engine
- CREAT67-14 (P2): Build the category-selection duel UI
- CREAT67-15 (P2): Persist BattleTurn logging to local SQLite
- CREAT67-16 (P3): Write Vitest suite covering round-resolution edge cases

### CREAT67-17: Elemental type triangle

- CREAT67-18 (P1): Model the five-type matchup matrix
- CREAT67-19 (P1): Expose multiplier values for advantage, disadvantage, and neutral cases
- CREAT67-20 (P1): Write unit tests for the full type matchup table
- CREAT67-21 (P2): Add type-advantage indicator to the duel reveal UI

### CREAT67-22: Unique creature abilities

- CREAT67-23 (P1): Build the Ability trigger/effect data model
- CREAT67-24 (P2): Author the launch roster's ability assignments
- CREAT67-25 (P2): Wire ability resolution into the fixed-order duel pipeline
- CREAT67-26 (P3): Add ability-activation feedback to the duel UI

### CREAT67-27: Gym/badge structure with leaders

- CREAT67-28 (P1): Model Gym and Leader data with type themes
- CREAT67-29 (P2): Implement gym sequencing and unlock logic
- CREAT67-30 (P2): Implement badge issuance on gym leader defeat
- CREAT67-31 (P3): Build gym leader encounter and badge-award UI

### CREAT67-32: Post-gym 3v3 creature swap

- CREAT67-33 (P1): Implement the idempotent GymSwap transaction
- CREAT67-34 (P2): Build the post-battle swap selection UI
- CREAT67-35 (P2): Guard against duplicate swap execution
- CREAT67-36 (P3): Reflect swapped roster in the creature management UI

### CREAT67-37: XP and trainer-directed stat growth

- CREAT67-38 (P1): Implement XP-earning logic for all battle outcomes
- CREAT67-39 (P2): Build the trainer-directed stat allocation UI
- CREAT67-40 (P2): Add duplicate-allocation validation
- CREAT67-41 (P3): Display stat growth history on the creature detail screen

### CREAT67-42: AI-powered single-player trainers

- CREAT67-43 (P1): Implement rule-based category-selection heuristics
- CREAT67-44 (P2): Integrate AI decision engine into the duel category-selection step
- CREAT67-45 (P2): Configure distinct difficulty profiles per trainer type
- CREAT67-46 (P3): Write Vitest tests verifying deterministic AI behavior

### CREAT67-47: Prototype on real creature data, no original art

- CREAT67-48 (P1): Source and import a placeholder creature dataset
- CREAT67-49 (P1): Validate imported data against stat and type constraints
- CREAT67-50 (P2): Build a generic placeholder asset pipeline
- CREAT67-51 (P3): Document the data source and future art swap-out plan

### CREAT67-52: Persistent open-world route exploration

- CREAT67-53 (P1): Persist world state changes to local SQLite
- CREAT67-54 (P2): Implement session-resume loading on app launch
- CREAT67-55 (P3): Add explored-route visual indicator to the map

### CREAT67-56: Badge-linked trainer leaderboard

- CREAT67-57 (P1): Model tracked-trainer badge counts
- CREAT67-58 (P2): Implement badge-based ranking algorithm
- CREAT67-59 (P2): Build the leaderboard screen UI

## Try it

Get started free, first idea free: https://app.trymurmur.studio/?utm_source=site&utm_medium=cta&utm_campaign=md&utm_content=example_creature-clash_md

## Related

- [All examples](https://www.trymurmur.studio/examples)
- [Awas](https://www.trymurmur.studio/examples/aavaas)
- [LaunchReel](https://www.trymurmur.studio/examples/launchreel)
- [Fin Matter](https://www.trymurmur.studio/examples/fin-matter)
- [Micro-Tool Agent](https://www.trymurmur.studio/examples/micro-tool-agent)
- [Kiln](https://www.trymurmur.studio/examples/headless-video-render)
- [Tidyroom](https://www.trymurmur.studio/examples/tidyroom)
- [Pagewell](https://www.trymurmur.studio/examples/pagewell)
- [PRD template](https://www.trymurmur.studio/templates/prd)
