Will it fit? An AI agent that 3D bin-packs your life into a van
A chat agent that estimates real item sizes, runs 3D bin-packing algorithms, and renders interactive three.js loading plans — with an honest verdict when it will not fit. Plus a free /api/packing/solve API.
"Will it all fit?" is the question behind every house move, van build, and storage-unit decision — and it's a question people answer today with guesswork and a tape measure. We built a product that answers it properly: describe the space and everything going into it in plain English, and an AI agent turns that into an interactive 3D packing plan.
Try it at /3d-packing. The default prompt is a real one: a 3.07 × 1.82 × 1.85 m space and a full household — two mattresses, fridge, freezer, desks, computers, three bikes, two scooters, a wardrobe, a 3D printer, and "lots of kitchen stuff."
How it works
The product is a chat agent with three tools, wired to a three.js scene the user watches live:
- Size estimation is the LLM's job. "1 king mattress, a fridge, kids stuff" contains no dimensions. The agent estimates realistic metric sizes (a NZ king mattress is about 1.67 × 2.03 m; a bike with the front wheel off packs to roughly 1.55 × 0.55 × 0.95 m) and consolidates vague piles like "kitchen stuff" into counted banana boxes. Every estimate is stated so you can correct it in the next message.
- Packing is a solver's job. Dimensions go to
POST /api/packing/solve, a 3D bin-packing engine using an extreme-point first-fit heuristic: items are placed one by one at candidate corner points, trying all allowed rotations, with overlap and support checks (a box needs at least ~55% of its base supported, and nothing stacks on a fragile top). Constraints likekeep_upright(fridges travel upright) andno_stack(3D printers) are honored. - Rendering is three.js. Each solve becomes a plan tab: colored boxes inside a wireframe container, with hover highlighting, a legend, and an explode slider to see how the layers come apart.
Three strategies, three plans
The same items pack very differently depending on ordering and placement scoring, so the agent runs several strategies and shows them side by side:
- tight — biggest items first, everything pushed low and into a corner; best raw utilization.
- layers — biggest footprints first, filling each level before starting the next; good for stable stacks.
- walls — tallest items first, building full-height slices from the front; the slice order is your loading order.
Honest infeasibility
The most useful output is often "no." The solver reports items it could not place and why — "exceeds the container in every allowed orientation" or "no remaining space after support constraints" — plus a raw-volume sanity check: if your items total 11 m³ and the space is 10.3 m³, no algorithm will save you, and the agent says so and proposes what to sell, dismantle, or strap to the roof. Real packing also rarely beats ~85% of raw volume, so the agent flags plans past that line as optimistic.
The API
The solver is a free, public endpoint:
curl -s https://app.nz/api/packing/solve -H 'Content-Type: application/json' -d '{
"container": { "length_m": 3.07, "width_m": 1.82, "height_m": 1.85 },
"items": [
{ "name": "king mattress", "length_m": 2.03, "width_m": 1.67, "height_m": 0.25 },
{ "name": "fridge", "length_m": 0.7, "width_m": 0.7, "height_m": 1.7, "keep_upright": true },
{ "name": "banana box", "length_m": 0.5, "width_m": 0.35, "height_m": 0.3, "quantity": 12 }
],
"strategy": "tight"
}'The response contains exact placements (x/y/z position and oriented l/w/h per item, in meters), utilization, and the unplaced list with reasons — enough to render your own visualization or embed packing checks in a logistics flow.
Chat usage is billed like everything else on app.nz: per token through the gateway, no subscription required.