Skip to content

Add-On Products

This guide covers how admins manage add-on products — extras (locker rentals, materials packages, equipment certifications, parking passes, expedited processing fees, welcome kits, etc.) that members can purchase alongside a membership or an event registration, or receive as part of their tier.

You’ll need one or more of the following permissions depending on the action:

ActionPermission
Create / edit / archive productsmanage_store
Attach add-ons to a membership tiermanage_memberships
Attach add-ons to an eventedit_events
View member add-on purchases and fulfillmentsview_users
View add-on revenue summarymanage_store

An add-on is any active product that has been attached to a membership tier or an event. There is no per-product “is add-on” flag — the attachment itself (via the membership tier’s add-ons tab or the event’s settings tab) is what makes a product an add-on in a given context. The same product can be sold in the store AND attached as an add-on to a tier.

Every product has an explicit billing model that determines how it can be sold and attached:

  • One-time — billed once at purchase. Members add these to their cart and check out (a parking pass for a single class, a one-off material kit, a welcome gift). One-time products are eligible for cart checkout, event attachment, and welcome-gift attachment.
  • Recurring — billed on a subscription cadence (a locker rental that renews monthly). Recurring products cannot be added to a cart, cannot be attached to events, and cannot be configured as welcome gifts. They are sold via a dedicated Subscribe flow and can be attached to tiers as recurring inclusions.

The billing model is required on every product — there is no longer a “none” / unset option. Existing products that did not have a billing model when this release shipped were automatically set to One-time; a dismissible notice on the admin products page shows the count and the date of the conversion so you can audit and re-classify as needed.

Navigate to Admin > Store > Products and click Add Product.

Clicking Add Product opens the Product setup modal first — before the full create form. This is where you make the three permanent decisions about the product:

  1. Is this a gift card? When toggled on, the billing model and inventory tracking choices are hidden — gift cards are always one-time and never inventory-tracked. The product cannot later be switched between gift-card and regular status.
  2. Billing model. One-time for cart-eligible products or Recurring for subscription-only products.
  3. Inventory tracking. Pick No tracking, Stock (depleting), or Capacity (concurrent slots). Capacity is only available when billing is Recurring — capacity tracking relies on the subscription lifecycle, so a one-time + capacity product would be unpurchasable. Switching billing back to one-time clears any capacity selection.

The modal carries a banner reminding you that these three choices are permanent. After you confirm, the create form opens with those three fields shown as read-only badges in a Product setup card at the top, and the rest of the form is unlocked for editing:

FieldDescription
NameDisplay name shown to members
DescriptionShort explanation; rendered alongside the price in member-facing surfaces
PriceStandard price
Member priceOptional discounted price for members. Leave blank to charge the standard price
Available recurring intervalsShown only when the archetype’s billing model is Recurring. Tick every cadence members may choose at Subscribe time (daily, weekly, monthly, annual).
Max quantity per memberLeave blank for unlimited, or enter a positive integer to cap the number of times one member can purchase this product
Inventory count / CapacityShown only when the archetype selected Stock or Capacity. For stock products, this is how many units exist; for capacity products, the concurrent slot ceiling. The mode itself is fixed by the archetype and shown read-only — see Tracking Inventory below.
Product typeEditable for non-gift-card products (Physical, Digital, Consumable, Service). Forced to Gift Card and hidden when the archetype selected gift card. Product type no longer gates inventory tracking — any non-gift-card product can track inventory once the archetype enables it.

After saving, the product appears in the list with a status of Active. Archiving it hides it from new purchases and Subscribe sessions without breaking existing member subscriptions — those remain billable until each member cancels.

The three archetype choices are the only permanent fields. On the edit screen they’re rendered as read-only badges:

Permanent (set once at creation)Freely editable later
Gift card statusName, description
Billing model (one-time / recurring)Price, member price
Inventory mode (none / stock / capacity)Available recurring intervals, max quantity per member
Inventory count / capacity ceiling (the value, not the mode)
Product type (within non-gift-card types — e.g., physical → digital)
Status (active / archived)

Most products don’t need inventory tracking — a service fee, a digital download, or a one-off processing charge has no physical scarcity. When a product does have scarcity, MakerVera tracks it in one of two modes. You pick the mode when you create the product, and it cannot be changed afterward — like single-session vs multi-session on events, the choice is a structural fact about the product.

StockCapacity
What it countsHow many units you haveHow many concurrent slots are filled
ExampleBags of filament, materials kits, welcome giftsLockers, parking passes, 24/7 door fobs
What happens at purchaseThe counter goes down by oneThe counter doesn’t move — a new active subscription fills a slot
What happens at cancellationNothing (you’ve already used the unit)The slot frees up automatically when the subscription ends
What happens at renewalOne unit is deducted each billing cycle (for tier-included add-ons)Nothing — the slot is already held by the active subscription
Can be sold in the cart?YesNo — capacity products are subscribe-only
Counter label on the edit screenInventory countCapacity
Adjustment labelAdjust stockAdjust capacity
  • A locker rental is capacity. You have 50 lockers; 47 are rented. When a member cancels, locker #14 is now available for someone else. Renewals don’t consume anything — the member already has the locker.
  • A monthly filament box is stock. Each month the member is shipped a new box. The box is gone when delivered; the next month’s box comes from your fresh inventory.
  • A 24/7 access fob is capacity. You issue 100 fobs; 92 are out. A cancelled fob is recovered and re-issued.
  • A welcome kit is stock. Each new member receives one; the kit is consumed; you replenish.

When in doubt: if you have to physically take something off a shelf to fulfill it, it’s stock. If the member is holding a reservation against a fixed pool, it’s capacity.

Capacity utilization on the product detail page

Section titled “Capacity utilization on the product detail page”

Capacity products show a live Slots in use row on the Inventory card — for example, 47 of 50. A coloured badge surfaces utilisation pressure:

  • Green below 80% utilisation
  • Yellow warning at 80% – 89%
  • Orange warning at 90% – 94%
  • Red warning at 95% and above

Use the badge as a planning signal — at 90% it’s time to think about adding capacity, raising the price, or opening a waitlist.

The products list also tags capacity-mode rows with a small Capacity badge in the inventory column so you can scan the catalogue at a glance.

You can lower the capacity below the number of currently-active subscriptions (for example, retiring a row of lockers without evicting members). Existing subscriptions continue to run until each member cancels naturally — MakerVera never evicts a paying member. New subscriptions are blocked until the active count drops below the new ceiling.

When inventory mode shipped, every product that was already tracking inventory was migrated automatically:

  • Recurring products that were tracking inventory were migrated to Capacity, with the capacity ceiling set to the current number of active subscriptions. This is a conservative floor — review and adjust as needed.
  • All other tracking products were migrated to Stock.

Review your existing tracked products after upgrading; the migration’s heuristic is correct for the common case but cannot read your intent. The mode is locked once set, so if a product was migrated to the wrong mode, archive it and create a new product with the correct mode.

Navigate to Admin > Memberships, open a tier, and switch to the Add-ons tab. Click Attach Add-on and pick a product from the searchable list. The modal then asks how the product should be attached.

There are three attachment modes:

The member chooses whether to purchase the add-on. They pay separately at their own cadence — one-time products through the cart, recurring products through Subscribe. No inventory is reserved by the attachment itself.

  • Eligible billing models: One-time and Recurring
  • Override price: Yes — charge a different price when this tier is in play
  • Inventory impact: Zero until a member actually purchases

The product is bundled into the member’s tier subscription and delivered every billing cycle at no additional cost. For stock products, one unit is deducted from inventory per cycle when the tier renews; failed deliveries (zero inventory at renewal) are recorded as failed fulfillments visible on the tier’s add-on panel and never block the member’s tier renewal. For capacity products, the slot is checked once on first activation and held by the active subscription thereafter — renewals do not deduct.

  • Eligible billing models: Recurring only. Attempting to attach a one-time product in this mode is rejected.
  • Included quantity per cycle: Required — how many units the member receives each billing period.
  • Override price: Not applicable — the inclusion is at no additional cost on top of the tier price.

The product is granted once, on the member’s first activation of this tier. If the member cancels and re-activates the same tier the gift is not re-fulfilled. If they switch to a different tier with its own welcome gifts, those new gifts are fulfilled.

  • Eligible billing models: One-time only. Attempting to attach a recurring product as a welcome gift is rejected.
  • Inventory impact: One unit deducted at first activation. Failed grants (inventory at zero) are recorded and surfaced on the tier panel; they do not block tier activation.

Detaching an attachment does not cancel any existing subscriptions or revoke any already-granted gifts — those continue under the terms in effect at purchase.

If you mark an Optional add-on as required on a tier (or attach it as required on an event), MakerVera blocks new sign-ups for that tier or event whenever the underlying product cannot be delivered — for example, when it has been archived or suspended, or when a stock/capacity product has run out. The member sees a friendly “this signup can’t proceed because a required add-on is unavailable” message that names the affected product and the parent tier or event series; no Stripe checkout is opened and no payment is taken.

Included add-ons follow the same blocking rule. Because an Included product is part of the value the member pays for every billing cycle, a membership cannot be started while one of its Included products is unavailable. On the signup page the unavailable inclusion carries a Sold out badge, the Subscribe button is disabled, and a notice lists the affected product names. Restocking or resuming the product clears the block and sign-ups proceed normally. Members who are already enrolled are unaffected — a renewal cycle where inventory is at zero is recorded as a failed fulfillment and the member’s tier keeps renewing.

Welcome gifts are the exception. A welcome gift is a one-time bonus rather than core tier value, so an unavailable welcome gift does not block signup. The gift shows a Sold out badge on the signup page for transparency, the member still completes their signup, and the gift is skipped at fulfillment (recorded as a failed grant on the tier panel).

On the member-facing tier browser, unavailable add-on chips carry a reason so members can tell archived from suspended at a glance: No longer offered for archived products (permanent), Temporarily unavailable for suspended ones (may return). Newer reasons fall back to a generic Unavailable label. The reason is purely informational — the rules above for required, included, optional, and welcome-gift add-ons still apply.

Members who already enrolled before the add-on became unavailable are not affected — their existing subscriptions and registrations continue uninterrupted.

Optional add-ons (those left as optional, not flagged required) follow a different rule: if the product is unavailable at signup, the optional add-on is simply omitted from the order with a soft warning. The member’s signup still completes.

Availability is server-authoritative and re-checked at the moment of payment. If an included or required product sells out in the brief window between the member opening the signup page and confirming payment, the signup is rejected with a notice naming the products that became unavailable, and the member is asked to go back and retry rather than being charged.

The tier’s Add-ons tab shows a row per attached product with a mode badge (Optional, Included, Welcome gift) and, for Included and Welcome gift, a small fulfillment summary showing how many fulfillments succeeded, failed, or are pending for the current period. Click the row to see the per-member fulfillment detail.

Open an event in the admin, switch to the Settings & Configuration tab, and scroll to the Attached add-ons section.

Only one-time products are eligible. The product picker filters out recurring products automatically; if the picker is empty after a search, double-check that the products you expect are marked One-time. Attempting to attach a recurring product to an event is also rejected at the API layer.

The configuration fields (override price, required vs optional) are unchanged. Event-level add-ons are scoped to that event only — they do not bleed across to other events the member registers for.

Members see different controls in the store depending on the product’s billing model:

Billing modelControls shownWhere the purchase happens
One-timeAdd to Cart button on the product card and product detail pageStandard cart and checkout flow
RecurringSubscribe button on the product detail page, plus an interval picker if multiple cadences are offeredA dedicated Subscribe flow that opens a Stripe subscription session directly — no cart step

Recurring products are not cartable. If a member somehow ends up with a recurring product in their cart (for example, from stale state after a billing-model change), the cart shows an alert explaining the situation and the checkout button is disabled until the row is removed.

Members can review their active and past recurring purchases on the Subscriptions page — see the Member Subscriptions section below.

Selecting Add-Ons During Signup and Event Registration

Section titled “Selecting Add-Ons During Signup and Event Registration”

Members can choose optional add-ons at the moment they sign up for a tier or register for an event, without a separate trip to the store:

  • During membership signup, the checkout page shows an add-on step listing the tier’s optional add-ons. The member can toggle each on, set a quantity (capped at whatever the product’s per-member limit and remaining availability allow), and the order total updates to reflect add-ons × quantity. The same step also previews what the tier includes at no extra charge and any welcome gifts that arrive on activation. Add-ons the admin marked required are pre-selected and cannot be removed.
  • During event registration, the registration page shows an add-on step listing the event’s optional (one-time) add-ons, with the same quantity control and live total.

Each add-on shows its availability before the member commits: a “X remaining” hint when stock is running low, and a Sold out state that disables selection when none are left. Availability is always computed by the server, so two members racing for the last slot can’t both grab it. If an add-on sells out in the brief window between selection and payment, it is dropped from the order with a clear notice and the rest of the signup or registration still completes — the member is never charged for something that became unavailable.

On the member’s membership page, a what’s included section summarises the value of their current tier: products included each billing cycle, welcome gifts they’ve received, and any required add-ons on the plan with their price. This is a read-only value summary — there is nothing to action here.

Members reach their subscriptions from the store navigation: Store > Subscriptions, or directly at /store/subscriptions. The page lists:

  • Active subscriptions — currently billing. Each card shows the product name, recurring price and interval, next billing date, and a Cancel button.
  • Past subscriptions — previously cancelled or ended. Each card shows the cancellation date and final status.

Cancellation is a single dialog with a confirmation step. After confirming, the subscription stops at the end of the current billing period (no proration) — the member retains access through the period they’ve already paid for, then the subscription enters the past list. Refunds, if any, are handled out-of-band through Admin > Orders.

Navigate to Admin > Add-on purchases (gated by view_users).

The page lists every member add-on subscription across your makerspace. Each row shows:

  • Member name and email
  • Add-on name
  • Status (Active, Cancelled, Paused, Expired)
  • Purchase date
  • Billing model

You can also reach a per-member view from any user’s profile — useful when reconciling a billing question.

StatusMeaning
ActiveThe subscription is currently in effect; recurring add-ons will continue to bill
CancelledThe member or an admin cancelled. The record is preserved (not deleted) for audit and revenue history
PausedBilling is temporarily suspended; the subscription will resume when unpaused
ExpiredA time-bounded purchase that has reached its end date

Cancellation never deletes the record — preserving it is what lets historical revenue reporting stay accurate.

Tier-included recurring inventory and welcome gifts are tracked individually. On the tier’s Add-ons tab, each Included or Welcome gift row exposes a per-cycle (or one-shot) fulfillment list:

  • Succeeded — inventory was deducted and the member received the unit(s)
  • Failed — inventory was at zero at renewal / activation; the unit was not granted. The member’s tier renewal or activation still completed; this row is the audit trail
  • Pending — the cycle has not yet hit its renewal hook (visible briefly on first attachment)

Failed fulfillments are the signal to top up inventory before the next billing cycle.

Navigate to Admin > Store > Add-on revenue (gated by manage_store).

Pick a date range and click Apply. The page shows:

  • One-time revenue — sum of revenue from one-time add-on transactions in the range
  • Recurring revenue — sum of revenue from recurring add-on renewals in the range
  • Total purchases — number of add-on transactions in the range
  • A per-add-on table with revenue, purchase count, and billing model

Revenue is sourced from the transactions ledger, not from subscription records. That means:

  • A cancelled subscription still contributes its historical revenue
  • A failed payment doesn’t count as revenue
  • A refund (when implemented) would net out

The maximum supported date range is 366 days. The page mirrors this constraint client-side, so the Apply button disables and explains the limit if you pick a wider range. End date must be on or after start date.

Currency in the report is USD by default; per-makerspace currency handling is on the roadmap.

PermissionWhat it gates
manage_storeCreate / edit / archive products; view revenue summary; dismiss the backfill notice
manage_membershipsAttach add-ons to membership tiers (all three modes)
edit_eventsAttach one-time products to events
view_usersView the cross-makerspace member add-on purchases page, the per-member purchases tab, and tier fulfillment detail

Most makerspace admins should have all four. Staff with view_users only can audit purchases and fulfillments without being able to change pricing or attachments.