# Leumas Plushies — plushies.leumas.tech

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.


# Leumas Plushies — plushies.leumas.tech

A plushie three ways: turning in 3D, laid flat as the cutouts it is sewn from, and as a printable
sewing pattern at any finished height from 100 to 800 mm. Three built-in designs — bear, bunny, whale.
Looking is free; the clean true-size print is what a membership buys; your own picture is taken as an
order request and kept on a waitlist until ordering opens.

Blueprint: `products/TODOS/plushies.leumas.tech.md`. Engine: `shared/packages/plush`. API:
`products/leumas-api/src/{routes,controllers}/plushies.js` at `/api/plushies`.

## What is honestly here

| Lane | State |
|---|---|
| Built-in designs → validated pattern → nested tiled sheets → HTML / PDF | **Runs.** `@leumas/plush`. |
| 3D turntable of each design | **Runs**, in the browser — procedural three.js builders in `@leumas/plush/three` behind a `lazy()`. No files are made. |
| 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`. |
| 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`. |

## Pages

`/` vitrine landing (3D + cutout posters) · `/make` and `/make/:design` the pattern maker · `/order`
upload + request (blocked banner) · `/gallery` published patterns · `/guide` a HowTo · `/faq` ·
`/pricing` · `/sdk` · `/legal`. Not indexed: `/mine` (member), `/p/:id` (live rows).

## Money

Rides `forge` and every Leumas tier — no plan row. Policy rows `plush.*` in
`shared/packages/entitlements/src/policy.js`: `plush.preview` and `plush.order` on the floor,
`plush.pattern` (the clean print) and `plush.seams` for members.

## Build and verify

```bash
pnpm --filter @leumas/plushies-web build      # og → vite → prerender → crawler files → check:plushies-public
pnpm smoke:plushies-site                       # the built site through the Imperium worker + the API seam
pnpm --filter @leumas/plush test
```

Dev: `pnpm dev:plushies` (port 5083; leave `VITE_API_BASE` unset).


---
Source: products/leumas-plushies/README.md
Canonical: https://docs.leumas.tech/p/products/plushies-web
