features

Storefront, Packages & Promotions

Sell online — list inventory products in a patient-facing shop, bundle sessions and gift cards into packages, and run codes, private links and automatic offers against them.

Zdrovia sells three things to patients: products from your inventory, packages of sessions or credit, and the services they book. This page covers the surfaces that put those in front of a patient and price them.

Page Route What it does
Storefront /dashboard/storefront Which products are for sale online
Packages /dashboard/packages Session bundles and gift cards
Promotions /dashboard/promotions Codes, private links and automatic offers

Patients see all of it in the portal shop at /portal/shop.


Storefront

A listing is a product seen from another angle: the same inventory record, marked as sellable online.

Navigate to Storefront in the sidebar. The three tiles at the top split the same list rather than counting different things — every listing is either up or held back:

Tile What it holds
All listings Everything listed for online sale
Published Visible in the shop right now
Hidden Listed, but held back

Listing a product

  1. Open the product from Inventory or from the Storefront page
  2. Add the listing details — shop name, description, images, online price
  3. Save

The listing editor is the same one Inventory uses, because a listing and a product are one record.

Publishing and hiding

Toggle Published on any row. Hiding a listing pulls it from the shop immediately without deleting anything — stock levels, past orders and the product record are untouched.

Stock

Online sales draw from the same stock as clinical dispensing. There is no separate online inventory to keep in step.


Form-gated products

Some products should not be bought without a practitioner seeing something first. A listing can require a form, and the purchase is blocked until the submission is reviewed.

When a patient submits a gating form, it appears in Form Reviews (/dashboard/form-reviews) — submissions waiting on a practitioner before a gated product can be bought.

From there, for each pending submission you can:

Action Effect
Approve The patient may buy the product
Reject The purchase stays blocked
Invalidate An earlier approval is withdrawn

If a patient submits a newer revision while you are looking at an older one, Zdrovia tells you which revision to act on rather than letting you act on the superseded one.

See Forms for building the form itself.


Packages

A package is prepaid value. Navigate to Packages in the sidebar.

The four tiles filter the same list they count — including withdrawn packages, so the number you press is the number you get:

Tile What it holds
All packages Everything, active or not
Active Currently on sale
Session bundles Packages granting sessions
Gift cards Packages granting a balance

The two kinds

Kind Grants
Session bundle A number of sessions of specified services
Gift card A monetary balance to spend at the clinic

A package can grant sessions, a balance, or both. Leaving a field blank grants none of that kind.

Configuring a package

Field Description
Kind Session bundle or gift card
Name What the patient sees
Description What it includes
Price What it costs
Sessions How many, and of which services
Credit The balance granted
Valid for How many days before it expires — blank for no expiry
Active Whether it is currently on sale

Packages a patient holds

A patient’s packages appear on their profile as a card, and in their portal. Sessions are drawn down as they are used; balance is applied at checkout.

Withdrawing a package

Set it inactive rather than deleting it. Packages already sold keep working; the package simply stops being offered.


Promotions

Codes, private links, and offers that apply on their own. Navigate to Promotions in the sidebar.

Promotions come in two families, shown as tabs:

Tab What it is
Marketing Discounts on what the clinic sells
Recommendation Offers tied to what a clinician recommended

How much comes off

Kind Effect
Percentage A share off whatever the offer covers
Fixed amount Off the matched subtotal, once
Per unit Off every unit the offer covers

How the shopper gets it

Method How it reaches a cart
They present a code The shopper types it at checkout. Shareable — and so is the discount
Applies on its own Every qualifying cart gets it, with nothing to present
Private link only Reached by a signed link you mint from the offer’s actions. It applies to nobody’s cart otherwise

Building a promotion

The dialog is five sections:

Section What you set
The offer Name, and how much comes off
How shoppers get it Code, automatic, or private link
What it applies to Which products, packages or services it covers
When it runs Start and end
Limits Caps on redemption

Link to this offer mints a signed link for an existing promotion. For a code-based promotion the link is a second way in and the code keeps working; for a link-only promotion it is the only way in.

Private link creates the offer and its signed link together, in one step — for a one-off offer you want to send to a single person.

Withdrawing a promotion kills its links. A link names the promotion by id, so it survives any edit to the offer’s terms.

Withdrawing

Promotions are withdrawn rather than deleted, so a cart that already used one still reconciles.


Getting paid

Online sales settle through your payment account. Deposits, checkout, refunds and payouts are covered in Payments.


Tips

  • Publish a small shop first. A shelf of five things a clinician actually recommends outsells a catalogue.
  • Use per unit discounts for consumables and fixed amount for a one-off gesture — a percentage off a large basket is rarely what you meant.
  • Prefer a private link over a code for anything you don’t want forwarded. A code is shareable by design.
  • Give gift cards an expiry only if your provincial rules allow it. Leaving Valid for blank means no expiry.
  • Gate the products that clinically need gating, not the ones you want to talk about first — every gated product adds a review to someone’s queue.
← Back to Help