{
  "schema": "leumas.docs.page/1",
  "id": "pkg:@leumas/plushies-web",
  "slug": "products/plushies-web",
  "kind": "capabilities",
  "bucket": "product",
  "title": "Leumas Plushies — plushies.leumas.tech",
  "name": "Leumas Plushies",
  "eyebrow": "plushies.leumas.tech",
  "chip": null,
  "summary": "Leumas Plushies at plushies.leumas.tech — a plushie as a 3D model, as flat cutouts and as a printable sewing pattern; three designs today at any size, and an order lane for your own picture.",
  "keywords": [
    "plushie sewing pattern",
    "teddy bear pattern",
    "custom plushie",
    "flat cutouts",
    "3d plush model",
    "order a plushie"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "\n# Leumas Plushies — plushies.leumas.tech\n\nA plushie three ways: turning in 3D, laid flat as the cutouts it is sewn from, and as a printable\nsewing pattern at any finished height from 100 to 800 mm. Three built-in designs — bear, bunny, whale.\nLooking is free; the clean true-size print is what a membership buys; your own picture is taken as an\norder request and kept on a waitlist until ordering opens.\n\nBlueprint: `products/TODOS/plushies.leumas.tech.md`. Engine: `shared/packages/plush`. API:\n`products/leumas-api/src/{routes,controllers}/plushies.js` at `/api/plushies`.\n\n## What is honestly here\n\n| Lane | State |\n|---|---|\n| Built-in designs → validated pattern → nested tiled sheets → HTML / PDF | **Runs.** `@leumas/plush`. |\n| 3D turntable of each design | **Runs**, in the browser — procedural three.js builders in `@leumas/plush/three` behind a `lazy()`. No files are made. |\n| Picture → 3D model → flattened pieces | **Dark.** Needs a GPU worker and a Blender worker (blueprint §14). `GET /api/plushies/status` reports `lanes.imageTo3d: false, blender: false`. |\n| Orders | **Blocked by design.** `POST /api/plushies/orders` keeps every request as a `plush_orders` row with `status: 'waitlist'` and answers 202 `{ accepting: false }`. `PLUSHIES_ORDERS_OPEN=1` flips new requests to `requested`. |\n\n## Pages\n\n`/` vitrine landing (3D + cutout posters) · `/make` and `/make/:design` the pattern maker · `/order`\nupload + request (blocked banner) · `/gallery` published patterns · `/guide` a HowTo · `/faq` ·\n`/pricing` · `/sdk` · `/legal`. Not indexed: `/mine` (member), `/p/:id` (live rows).\n\n## Money\n\nRides `forge` and every Leumas tier — no plan row. Policy rows `plush.*` in\n`shared/packages/entitlements/src/policy.js`: `plush.preview` and `plush.order` on the floor,\n`plush.pattern` (the clean print) and `plush.seams` for members.\n\n## Build and verify\n\n```bash\npnpm --filter @leumas/plushies-web build      # og → vite → prerender → crawler files → check:plushies-public\npnpm smoke:plushies-site                       # the built site through the Imperium worker + the API seam\npnpm --filter @leumas/plush test\n```\n\nDev: `pnpm dev:plushies` (port 5083; leave `VITE_API_BASE` unset).\n",
  "source": {
    "path": "products/leumas-plushies/README.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 2397,
    "hash": "84fe7ba9ece700543d7af370abfa9ad4596302e9"
  },
  "urls": {
    "html": "/p/products/plushies-web",
    "json": "/docs/products/plushies-web.json",
    "md": "/docs/products/plushies-web.md"
  },
  "links": {
    "composes": [
      "pkg:@leumas/theme",
      "pkg:@leumas/ui"
    ],
    "usedBy": [],
    "product": [],
    "howTo": [],
    "skills": []
  },
  "exports": null
}
