One Order Model

Here's a question worth asking about any platform you run your business on: when you sell a physical product, sell an event ticket, and take a room booking — are those really three different systems pretending to be one?

In a lot of platforms, yes. Behind the friendly interface, there are three separate transaction tables, three separate reports, three separate places customer history can hide.

In ExireNexus, there's just one.

Every sale is the same shape

Whether a customer buys a t-shirt, purchases a ticket to your summer event, or books a cabin for the weekend, it becomes an order with one or more order items. The order carries the same information no matter what was sold:

  • Who bought it (linked to their record)
  • What currency and payment method was used
  • Whether it's paid, and when
  • Delivery or fulfillment status
  • Billing and shipping addresses
  • Totals — including VAT, shipping, and any discount, both including and excluding tax

And each line item flexibly links to whatever was actually sold: a Product for a physical or digital item, an Item for content tied to the purchase, or an Event when the purchase is really a booking. One order can even mix these — a customer buying a product and booking a room in the same transaction, on the same invoice.

Why this actually matters for you

Think about what this replaces: no more jumping between "the shop reports" and "the bookings reports" to understand a customer's full relationship with your business. No more explaining to a new staff member why room bookings work completely differently from product sales in the back office. It's one order list, one search, one export — and everything shows up there, regardless of what kind of thing was actually purchased.

It also means new features tend to arrive "for free." Recurring billing, for instance — built once on ShopOrder — works for subscription products and for anything else built the same way, rather than being bolted onto just one part of the system.

Recurring revenue, handled properly

Selling a subscription or a membership isn't an afterthought here — it's a first-class part of the order model. A ShopOrder can track its own recurring interval, next and last payment dates, and its linked Vipps agreement, so subscription billing runs through the same Vipps Recurring integration mentioned in our e-commerce post, without needing a separate billing system bolted on the side.

Room for how you actually work

Every business tracks a few things its own way, and ExireNexus doesn't fight that. Alongside the standard fields, each order has flexible custom fields — text, numeric, and boolean — plus three customizable status fields. That means you can track things like "requires signature," "assigned to warehouse team," or "deposit collected" without needing a developer to add a database column every time your process evolves.

There's also room for the practical realities of running a shop: confirmation and shipping-notification tracking so you never accidentally email a customer twice, external order and payment IDs for syncing with accounting or fulfillment systems, and archive/soft-delete flags so old orders can be tidied away without ever truly being lost.

The bigger picture

This is the same principle running through every part of ExireNexus: rather than a different system for every kind of "thing that gets sold," there's one well-designed transaction model flexible enough to represent all of them. A product sale, a ticket, a booking, and a subscription payment all end up looking the same to you — one list, one report, one customer history — even though under the hood they're doing genuinely different jobs.

Combine that with the MCP Server from earlier in this series, and even reporting becomes conversational: "How many orders came in last week, and how many were room bookings?" is a question the same order model can answer directly.



Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.