← Back to Blog

Day 63: Billing Where We Already Live

Tuesday. One commit on a branch — the final review round on the Web Search integration before it merges tomorrow. main didn't move today. The interesting work was off the keyboard.

The First Calls That Aren't Exploratory

There have been conversations about Pinchy since Day 1. Most of them were about what we were building. This week the conversations changed shape. Two companies walked in with concrete production intent — roles to scope, integrations to pilot, a line-of-business team ready to start, a deployment window. The questions were no longer "what does this look like?" but "how do we roll this out without breaking anyone's current workflow?"

That's a nicer class of problem to have. It's also the class of problem that exposes every seam in the product that's still there because nobody has been rude enough about it yet. A company with a signed proposal is the rudest review you can get. They're already paying attention.

Pinchy's Own Subscriptions Run in Odoo

That raised the question of how Pinchy itself bills. Until now, the answer has been "trial keys from a Lambda and a handshake" — fine for seeding users, nowhere near enough for recurring enterprise subscriptions.

The decision was the obvious one: run the subscriptions in Odoo. We already integrate Odoo as the first-party business system inside Pinchy — the Sales Analyst template, the Finance Controller, the 16 agent templates that speak Odoo natively. Every VAT rule, every invoice type, every fiscal position we documented last week for the pinchy-docs plugin is the same accounting surface we need to run our own company. Using anything else would mean running two billing systems, or asking customers to trust an integration we won't eat ourselves.

So we're running it through Helmcraft's Odoo. Pinchy Pro subscriptions as recurring products. The self-hosting fee when the customer doesn't want to run it themselves as a separate line item. Invoices go out from Odoo, VAT gets booked the way the Finance Controller agent says it should, payments come back through the same system the product is wired into.

That arrangement gives us one artefact that's hard to get any other way: we're a customer of our own integration, in anger, on real invoices. The moment the Finance Controller agent gets a question subtly wrong against Austrian VAT rules, we're the ones who will notice first. Dogfooding stops being a slogan when the numbers are your own.

What That Changes in the Product Roadmap

Nothing urgent, and several things softly. The billing Lambda keeps issuing trial keys for now — no point rewriting an endpoint that takes two minutes of work a day to keep running. The next license type, past trial, will be an Odoo-issued artefact instead: a subscription confirmation that the instance can validate against a public key, the same way the JWT trial key works today. When a subscription lapses, Odoo already knows. When it renews, Odoo already knows. The instance just has to ask.

There's no commit for any of this yet. It's the kind of decision that needs to sit for a day before it becomes code. But it sets the next several weeks of the build: the Odoo integration stops being purely outbound (agents reading from Odoo on the customer's behalf) and becomes bidirectional (Odoo writing into the licensing side of Pinchy). Same integration code path. Different direction of trust.

Day 63

No shipped features today. A review round on one branch and a commercial decision that will show up in commits over the next fortnight. The two tracks that matter most right now — the first production deployments, and the company's own billing — are both happening inside the same Odoo instance the product already talks to. That isn't a coincidence; it's the whole point.

← Day 62: Gmail Without the Dev Console Day 64: The Open Web, Closed Carefully →

Pinchy is open source and ready to deploy. Clone the repo, run docker compose up, and your first agent is live in minutes.