Tridi

Tridi is a management app for small 3D printing businesses. It follows the whole flow: buying filament and components, printing batches, assembling products, sending stock to sales channels, and recording expenses. Because every gram and every print minute is tracked, it can tell you what a product actually costs to make.

Why it exists

I run a small 3D printing business on the side. At first I kept everything in spreadsheets: filament stock, print logs, what went to which consignment shop, what I spent. It worked until it didn’t. I never really knew my cost per product, the price I paid per gram changed with every restock, and failed prints quietly ate into the margin.

So I built the tool I needed. I use Tridi every day to run my own shop, and that is the main reason it exists. Every feature started as a problem I had that week.

What it does

  • Products: products with variants (colors), printed models with versioned files and print recipes, and a bill of materials per product.
  • Materials: filament in grams and components in pieces, each with a weighted-average cost that updates on every restock.
  • Printing: a print schedule of batches per printer. When a batch finishes you record good and failed parts, and the real grams used come out of stock.
  • Assembly: printed parts and components become finished goods, with the labor time recorded.
  • Sales: stock sent to consignment partners or sold directly, sales reports, and payments.
  • Expenses: material purchases, bills, packaging, ads, and the rest.
  • COGS: a live cost per unit from real data: filament, machine time, components and labor, with failed prints spread over the good parts. From that it suggests a selling price.

The technology

Tridi is one Rails 8 app with a React 19 SPA inside it, built with Vite. It uses Postgres with row-level security so each business’s data stays in its own workspace, Solid Queue for background jobs, and Cloudflare R2 for model files and photos. It runs on my own VPS and is deployed with Kamal.

It also has an MCP server, protected with OAuth, so an AI assistant like Claude can use Tridi as a set of tools.

Running a business from a chat

This is the part that surprised me. Even though Tridi has a full web UI, most days I don’t open it. I open Claude.

When a filament order arrives, I paste the marketplace receipt into the chat and say “record this restock.” Claude reads the items, the vouchers and the shipping, matches each spool to the right stock pool, and shows me a preview. I check the numbers, say yes, and it’s saved. The same goes for “Printer A is done, 12 good, 1 failed,” “add a new product,” “what’s on the print schedule today,” “how much stock do I have for this keychain,” or “assemble 10 of the blue variant.”

Every write goes through a preview first, and nothing is saved until I confirm. That rule makes the chat feel safe enough to use for real money and real stock.

Why I think headless SaaS is the future

Working this way changed how I think about software. The value of Tridi isn’t its screens. It’s the domain model, the rules (stock can’t go negative, posted records are never edited, costs come from real data), and the data. The UI is just one way in.

For a lot of business software, I think the main way in will soon be an AI assistant the user already has open. You don’t learn where a button lives. You say what happened, and the app does the bookkeeping. A web UI is still useful for looking at dashboards and fixing things, but it stops being the only door.

That’s what I mean by headless SaaS: a product that is mostly a well-designed API and set of tools with strong rules, that works wherever the user is. If you build SaaS today, I think it’s worth designing for this from the start.

Try it

Tridi is in early access. I’m opening it to other 3D printing businesses one at a time. If you run a print shop and want to try it, send me an email or reach out on LinkedIn. I’d love to hear how you run yours.