{
 "recipe": "2d-platformer",
 "version": "0.3",
 "status": "test-built",
 "snapshot": "2026-10-12",
 "answers": {
  "use": "commercial",
  "budget": "free",
  "credit": "ok",
  "agent": "claude-code",
  "style": "cartoon",
  "lang": "ts",
  "text_lang": "en"
 },
 "tested": {
  "on": "2026-10-12",
  "same_parts": true,
  "differs_in": []
 },
 "parts": [
  {
   "role": "engine",
   "name": "Game engine",
   "pick": "tool:phaser",
   "title": "Phaser",
   "url": "https://agentgid.com/tools/phaser/",
   "version": "4.2.1",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "x:kaplay",
    "tool:pixi-js"
   ]
  },
  {
   "role": "physics",
   "name": "Physics",
   "pick": "x:phaser-arcade",
   "title": "Arcade Physics",
   "url": "https://cdn.jsdelivr.net/npm/phaser@4.2.1/skills/physics-arcade/SKILL.md",
   "version": null,
   "kind": null,
   "reach": "builtin",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "x:phaser-matter",
    "tool:matter-js"
   ]
  },
  {
   "role": "build",
   "name": "Dev server and bundler",
   "pick": "tool:vite",
   "title": "Vite",
   "url": "https://agentgid.com/tools/vite/",
   "version": "8.3.4",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "tool:webpack"
   ]
  },
  {
   "role": "lang",
   "name": "Language",
   "pick": "tool:typescript",
   "title": "TypeScript",
   "url": "https://agentgid.com/tools/typescript/",
   "version": "7.0.2",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "x:javascript"
   ]
  },
  {
   "role": "levels",
   "name": "Level format",
   "pick": "x:level-json",
   "title": "Levels as JSON in the repo",
   "url": null,
   "version": null,
   "kind": null,
   "reach": "builtin",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "x:ldtk",
    "x:tiled"
   ]
  },
  {
   "role": "tests",
   "name": "Scripted browser tests",
   "pick": "tool:playwright-test",
   "title": "Playwright (JavaScript)",
   "url": "https://agentgid.com/tools/playwright-test/",
   "version": "1.64.0",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "sprites",
   "name": "Sprites and tiles",
   "pick": "asset:kenney",
   "title": "Kenney",
   "url": "https://agentgid.com/assets/kenney/",
   "version": null,
   "kind": null,
   "reach": "link",
   "warnings": [],
   "chosen_by": "recipe",
   "item": {
    "id": "item:kenney-new-platformer-pack",
    "name": "New Platformer Pack",
    "url": "https://kenney.nl/assets/new-platformer-pack",
    "license": "CC0"
   },
   "alternatives": [
    "asset:opengameart",
    "asset:game-icons"
   ]
  },
  {
   "role": "sfx",
   "name": "Sound effects",
   "pick": "asset:kenney",
   "title": "Kenney",
   "url": "https://agentgid.com/assets/kenney/",
   "version": null,
   "kind": null,
   "reach": "link",
   "warnings": [],
   "chosen_by": "recipe",
   "item": {
    "id": "item:kenney-new-platformer-pack",
    "name": "New Platformer Pack",
    "url": "https://kenney.nl/assets/new-platformer-pack",
    "license": "CC0"
   },
   "alternatives": [
    "x:jsfxr",
    "asset:sonniss-gdc",
    "asset:freesound",
    "asset:soundbible"
   ]
  },
  {
   "role": "font",
   "name": "Font",
   "pick": "asset:google-fonts",
   "title": "Google Fonts",
   "url": "https://agentgid.com/assets/google-fonts/",
   "version": null,
   "kind": null,
   "reach": "api",
   "warnings": [],
   "chosen_by": "recipe",
   "item": {
    "id": "item:gfont-lilitaone",
    "name": "Lilita One",
    "url": "https://fonts.google.com/specimen/Lilita+One",
    "license": "OFL-1.1"
   },
   "alternatives": [
    "asset:kenney",
    "asset:fontsource",
    "asset:firacode",
    "asset:hack"
   ]
  },
  {
   "role": "knowledge",
   "name": "Engine knowledge",
   "pick": "x:phaser-skills",
   "title": "Phaser agent skills",
   "url": "https://github.com/phaserjs/phaser/tree/master/skills",
   "version": null,
   "kind": null,
   "reach": "builtin",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "mcp:context7"
   ]
  },
  {
   "role": "playtest",
   "name": "Playtesting",
   "pick": "mcp:playwright",
   "title": "Playwright MCP",
   "url": "https://agentgid.com/mcp/servers/io-github-microsoft-playwright-mcp/",
   "version": "0.0.83",
   "kind": null,
   "reach": "mcp",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "mcp:chrome-devtools"
   ]
  },
  {
   "role": "data",
   "name": "Tool and asset data",
   "pick": "mcp:agentgid",
   "title": "AgentGid",
   "url": "https://agentgid.com/connect/",
   "version": null,
   "kind": null,
   "reach": "mcp",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "hosting",
   "name": "Where to publish",
   "pick": "x:itch-io",
   "title": "itch.io (HTML5 game)",
   "url": "https://itch.io/docs/creators/html5",
   "version": null,
   "kind": null,
   "reach": "none",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "x:github-pages",
    "api:netlify",
    "api:cloudflare-workers",
    "api:render"
   ]
  }
 ],
 "install": [
  "npm install --save-exact phaser@4.2.1",
  "npm install -D --save-exact vite@8.3.4 typescript@7.0.2 @playwright/test@1.64.0"
 ],
 "checks": [
  {
   "level": "info",
   "text": "Phaser is at 4.2.1 on npm. Models often write Phaser 3 code from memory, so the brief points the agent at the skills shipped inside the package.",
   "source": "https://registry.npmjs.org/phaser/latest"
  },
  {
   "level": "info",
   "text": "The chosen pack has 1,353 entries and itch.io allows 1,000 files per upload. The brief tells the agent to copy only the atlases and sounds it uses.",
   "source": "https://itch.io/docs/creators/html5"
  }
 ],
 "summary": {
  "parts": 13,
  "roles": 13,
  "fromAgentGid": 9,
  "collected": 4,
  "manual": [],
  "credits": [],
  "paid": [],
  "free": true,
  "blocks": 0,
  "warns": 0,
  "assets": 3,
  "cleared": 3,
  "byHand": []
 }
}
