The idea
Most privately owned production machines run a few hours a week. A sign shop's laser cutter, a cabinet maker's CNC router, a ceramicist's kiln, a garage with a decent 3D printer — all idle most of the time, all expensive enough that the owner would happily sell time on them. This is a marketplace that lists that spare capacity by machine, not by shop: you search for "60W CO2 laser, 600×400 bed, within 10km", see real availability, upload your file, and get a firm price before you leave the house.
Why build this
Makerspaces solved this for members in cities that have one, but membership is a monthly commitment for someone who needs four hours of machine time twice a year. Meanwhile the owner side has gotten easier to reach: small fabrication shops already have web presences and are used to taking jobs by email, and they hate quoting one-off hobby work by hand more than they hate the work itself. The gap is a pricing and scheduling layer neither side wants to build.
Timing helps too. Desktop-class industrial machines got cheap enough that there are far more of them in private hands than there were five years ago, and the owners bought them for a business that only intermittently needs them. Machine-hour utilisation is now the thing they're anxious about.
Stack sketch
- Next.js on Vercel for the marketplace; server actions for booking flows, since most of the app is forms over a database.
- Postgres via Neon, with PostGIS for radius search. Machine listings are rows with a
machine_classenum plus a JSONB spec blob, so a laser and a kiln can share a table without a nullable-column swamp. - Availability as RRULE strings (
rrulenpm package) expanded into concrete slots at query time, with a booking table holding the exclusive locks. Do not store expanded slots — daylight-saving bugs live there. - Stripe Connect Express for payouts, with a manual-capture hold at booking and capture at job completion, so a no-show doesn't leave the shop unpaid.
- File intake: SVG and DXF for 2D, STL/STEP for 3D. Parse SVG with
svgsonand DXF withdxf-parserserver-side to extract bounding box and cut-path length; render STL previews client-side with three.js. Bounding box versus bed size is the single check that kills most bad bookings. - Mapbox for the map view, Twilio for booking SMS, Resend for the email side.
Scope for v1
- One city, one machine class — laser cutters. Depth beats breadth for supply density.
- Owner onboarding: list a machine, set hourly rate and a minimum, define weekly availability, upload a photo.
- Buyer flow: search by radius and bed size, upload a file, see automatic bounds validation, book a slot, pay a deposit.
- A liability waiver and a materials note (bring your own, or buy from the shop) as plain text fields on the listing.
- Deliberately out: automated quoting from cut time, in-app messaging beyond a booking note, insurance, shipping of finished parts, anything resembling a design tool.
Where it could go
The obvious expansion is quoting. Once you're parsing files anyway, you can estimate cut time from path length and material thickness, and a shop that trusts your estimate can turn on instant booking instead of approving each job. That converts the marketplace from a calendar into a pricing engine, which is where the margin is.
The second path is unattended drop-off. Kilns and 3D printers don't need the customer present, so a listing can offer "leave it in the lockbox" fulfilment with a photo-confirmation step. That decouples bookings from the owner's working hours and roughly doubles sellable capacity. From there, multi-machine shops start wanting a real scheduling back office, which is a subscription product sitting on top of the same data.
Watch out for
The liability story is the hard part, not the software: a stranger operating a class-4 laser on someone else's insurance policy is a claim waiting to happen, so v1 should require the owner to run the machine and price accordingly. Supply liquidity is the other risk — a marketplace with nine listings in a city looks abandoned, so seed the owner side entirely by hand before showing it to a single buyer.