The Machine Behind the Shop: Running a 3D-Printing Business on Five Printers and a Raspberry Pi
When people hear "3D-printing business," they picture the printers. And sure, the printers matter. But after a year of running DrawnToCreations, a little shop selling 3D-printed speaker mounts and household accessories on Etsy and eBay, I can tell you the printers are the easy part. The hard part is everything that happens around them: turning a pile of parts into packed, labeled, shipped orders, one solo operator at a time, without dropping anything on the floor.
This is the story of the system I built to run that shop. It's held together by a print farm, a packing-bench app called PrintToShip, a computer-vision service called plate-check, and a single Raspberry Pi doing the orchestration.
What the shop actually sells
DrawnToCreations makes small, functional prints: magnetic and bike mounts for portable speakers (JBL, Sonos, UE Boom, Beats), plus a rotating cast of household accessories — a dog-waste scooper, an ice-scoop holder, vacuum clips. The common thread is what makes them good products: small, light, high-margin prints that ship in a padded mailer. No 12-hour benchy prints, no freight.
A MEGABOOM 3/4 mount, fresh off the bench — tabbed cavity, printed in one piece.
Two storefronts, opened a couple months apart in 2025:
- eBay — the first channel, good for high-intent buyers searching for a specific speaker model.
- Etsy — the second, where discovery, SEO, and A/B testing move the needle.
Each platform has its own quirks (fees, SKU formats, traffic patterns, seasonality), and reconciling them is a whole discipline of its own. But the front-end is only half the business. The other half is the machine in the basement.
The real problem: orchestration, not printing
A single order has to move through five steps:
- Design: model the part in Fusion 360 (cavity dimensions, tabs, tolerances per speaker).
- Print: slice, assign to a printer, print in the right color and material.
- QC + collect: confirm the print came out clean and the bed is clear for the next job.
- Pack: match the physical part to the right order, in the right quantity.
- Label + ship: print a 4×6 thermal label and drop it off at the post office.
Even the packing supplies are printed — a bubble-wrap dispenser bolted to the bench.
Any one of those steps is trivial. Doing all five, across five printers running different jobs in different colors, for a queue of orders, as one person — that's where things fall apart. You mispack. You start a print on a bed that isn't clear. You lose track of which of the five machines just finished. The failure mode of a small print farm isn't a bad print; it's a bad handoff.
So I built the handoffs.
The print farm
Five Bambu Lab P1S printers. I settled on a single model on purpose — identical machines mean identical slicer profiles, identical maintenance, and interchangeable plates. Uniformity is a feature when you're operating solo.
Early on the farm lived behind Home Assistant, using its Bambu integration for camera feeds and MQTT. It worked, but it was a lot of moving parts for what I needed. I eventually pulled the printers out of Home Assistant entirely and wrote direct backends — talking to each printer's camera and LAN MQTT myself. Fewer layers, fewer things to break before a post-office run.
PrintToShip: the packing bench
PrintToShip is the app I built to run the shipping station. It's a touchscreen kiosk on the packing bench that turns "a bin of finished parts and a list of orders" into a guided, hard-to-mess-up packing flow:
- It knows the open orders across both shops.
- It tells you what to pack, in what quantity, for the order in front of you.
- It prints the shipping label to a 4×6 thermal printer.
- It auto-collects finished jobs off the farm so the queue stays honest.
A new-order push from PrintToShip. The pack list is built straight from the order's line items.
The PrintToShip app, badged with the pending count.
That last piece, auto-collect, is the interesting one, because it depends on the system knowing when a print is done and off the bed. A printer reporting "print complete" isn't enough: a finished print can sit on a bed for hours before I get to it. "Complete" and "collected" are different events, and the workflow needs the second one.
That's the job I handed to a little vision service.
plate-check: eyes on the farm
plate-check watches each printer's camera and answers one simple question: is this bed clear, or is there still a print on it?
It's a few-shot computer-vision model (a MobileNetV2 feature embedder with a small set of self-labeled example frames per printer) running as a pod on the Pi. When a bed transitions from "has a print" to "clear," that's the collect signal PrintToShip has been waiting for.
plate-check's design is fun — few-shot learning, per-printer calibration, and one very silly trick involving a mirror and a smiley-face sticker. But in the context of the business, its job is simple: it closes the loop between the farm and the packing bench so I don't have to babysit five cameras.
The whole thing runs on a Pi
All of this (PrintToShip, plate-check, the printer backends) runs as a single-node k3s cluster on a Raspberry Pi. No cloud, no Home Assistant in the hot path, no dependency on anything outside the home LAN. The kiosk is served over HTTPS on the local network; the printers are reached directly over MQTT and their camera streams.
A Raspberry Pi running Kubernetes is overkill for a five-printer shop, no argument. But it gives me clean deploys, self-healing pods, and a setup I can rebuild from a runbook in an afternoon (which I've had to do, more than once).
The part nobody sees: the data
The shop also has an entire analytics side that never touches a printer. Sales and profitability reporting across both platforms. COGS broken down to the gram of filament and the cost of a mailer. Etsy listing A/B tests with real baselines and revert triggers. Ad-spend efficiency reviews. Even a Reddit scout that surfaces relevant conversations to engage with organically.
Last week at a glance: 726 views, 20 orders (+150%), $681. Where the keep/cut calls get made.
This is the stuff that decides whether the business is a business or an expensive hobby. Margin math tells you which products to keep and which to cut. Traffic data tells you which listings to optimize. It's the least glamorous part of the whole setup, and the part that decides what stays in the catalog.
What I've learned
Running a physical-product business as a software engineer, one lesson keeps repeating: the product is easy; the pipeline is the product. Anyone can print a speaker mount. What makes it a business is that an order can flow from a customer's click to a labeled box without me holding the whole state in my head.
Every tool I've built (PrintToShip, plate-check, the analytics repo) exists to move a piece of that state out of my head and into a system. That's the machine behind the shop. The printers are just the loud part.
Next up: a closer look at plate-check, the little vision service that tells my printers apart and knows when a bed is clear.