{
 "recipe": "3d-scene",
 "version": "0.3",
 "status": "test-built",
 "snapshot": "2026-10-12",
 "answers": {
  "use": "commercial",
  "budget": "free",
  "credit": "ok",
  "agent": "claude-code",
  "flavor": "react",
  "light": "studio",
  "text_lang": "en"
 },
 "tested": {
  "on": "2026-10-12",
  "same_parts": true,
  "differs_in": []
 },
 "parts": [
  {
   "role": "renderer",
   "name": "3D library",
   "pick": "tool:three",
   "title": "Three.js",
   "url": "https://agentgid.com/tools/three/",
   "version": "0.186.1",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "react",
   "name": "React layer",
   "pick": "tool:react-three",
   "title": "React Three Fiber",
   "url": "https://agentgid.com/tools/react-three/",
   "version": "9.8.1",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "helpers",
   "name": "Helpers",
   "pick": "x:drei",
   "title": "Drei",
   "url": "https://agentgid.com/tools/react-three/",
   "version": "10.7.9",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "ui",
   "name": "UI framework",
   "pick": "tool:react",
   "title": "React",
   "url": "https://agentgid.com/tools/react/",
   "version": "19.3.0",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "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:next"
   ]
  },
  {
   "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": "pipeline",
   "name": "Model pipeline",
   "pick": "x:gltfjsx",
   "title": "gltfjsx",
   "url": "https://github.com/pmndrs/gltfjsx",
   "version": "6.5.3",
   "kind": "npx",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "x:gltf-transform"
   ]
  },
  {
   "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": "model",
   "name": "3D model",
   "pick": "asset:poly-haven",
   "title": "Poly Haven",
   "url": "https://agentgid.com/assets/poly-haven/",
   "version": null,
   "kind": null,
   "reach": "api",
   "warnings": [
    "Asks for a credit in products that call its API while running.",
    "Do not scrape its website. Use its API, one request at a time, and download only the files you use."
   ],
   "chosen_by": "recipe",
   "item": {
    "id": "item:polyhaven-ArmChair_01",
    "name": "Arm Chair 01",
    "url": "https://polyhaven.com/a/ArmChair_01",
    "license": "CC0"
   },
   "alternatives": [
    "asset:kenney",
    "asset:quaternius",
    "asset:poly-pizza",
    "asset:smithsonian-open-access"
   ]
  },
  {
   "role": "hdri",
   "name": "Lighting environment",
   "pick": "asset:poly-haven",
   "title": "Poly Haven",
   "url": "https://agentgid.com/assets/poly-haven/",
   "version": null,
   "kind": null,
   "reach": "api",
   "warnings": [
    "Asks for a credit in products that call its API while running.",
    "Do not scrape its website. Use its API, one request at a time, and download only the files you use."
   ],
   "chosen_by": "recipe",
   "item": {
    "id": "item:polyhaven-studio_small_09",
    "name": "Studio Small 09",
    "url": "https://polyhaven.com/a/studio_small_09",
    "license": "CC0"
   },
   "alternatives": [
    "asset:ambientcg"
   ]
  },
  {
   "role": "knowledge",
   "name": "Library knowledge",
   "pick": "x:pmndrs-mcp",
   "title": "pmndrs docs",
   "url": "https://r3f.docs.pmnd.rs/llms.txt",
   "version": null,
   "kind": null,
   "reach": "mcp",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "mcp:context7",
    "x:three-llms"
   ]
  },
  {
   "role": "playtest",
   "name": "Visual checks",
   "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": "api:netlify",
   "title": "Netlify",
   "url": "https://agentgid.com/apis/netlify/",
   "version": null,
   "kind": null,
   "reach": "api",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": [
    "x:github-pages",
    "api:cloudflare-workers",
    "api:render"
   ]
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:react-dom",
   "title": "React DOM",
   "url": "https://agentgid.com/tools/react/",
   "version": "19.3.0",
   "kind": "runtime",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:vite-react",
   "title": "Vite React plugin",
   "url": "https://agentgid.com/tools/vite/",
   "version": "6.1.2",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  },
  {
   "role": "also",
   "name": "Also",
   "pick": "x:types-three",
   "title": "Types for three.js",
   "url": "https://www.npmjs.com/package/@types/three",
   "version": "0.186.0",
   "kind": "dev",
   "reach": "package",
   "warnings": [],
   "chosen_by": "recipe",
   "item": null,
   "alternatives": []
  }
 ],
 "install": [
  "npm install --save-exact three@0.186.1 @react-three/fiber@9.8.1 @react-three/drei@10.7.9 react@19.3.0 react-dom@19.3.0",
  "npm install -D --save-exact vite@8.3.4 typescript@7.0.2 @playwright/test@1.64.0 @vitejs/plugin-react@6.1.2 @types/three@0.186.0",
  "",
  "# when the plan calls for it: npx gltfjsx@6.5.3 <model>.gltf --transform --types"
 ],
 "checks": [
  {
   "level": "info",
   "text": "Versions agree: React Three Fiber 9.8.1 accepts react >=19 <19.4 and three >=0.156; this kit pins react 19.3.0 and three 0.186.1.",
   "source": "https://registry.npmjs.org/@react-three/fiber/latest"
  },
  {
   "level": "info",
   "text": "The agent can fetch these files by itself: Poly Haven's API needs no key. Its terms ask for a unique User-Agent and forbid scraping the website.",
   "source": "https://raw.githubusercontent.com/Poly-Haven/Public-API/master/ToS.md"
  }
 ],
 "summary": {
  "parts": 17,
  "roles": 14,
  "fromAgentGid": 11,
  "collected": 6,
  "manual": [],
  "credits": [],
  "paid": [],
  "free": true,
  "blocks": 0,
  "warns": 0,
  "assets": 2,
  "cleared": 2,
  "byHand": []
 }
}
