Customer portal (Shopify)
For merchants selling through Shopify, the Waveform app includes a My Licenses page in the customer account. It is the buyer-facing counterpart to the merchant’s device manager, and it cuts support tickets: customers free their own seats.
What the buyer sees
Section titled “What the buyer sees”For each license:
- the product name and a status badge (Active, Trial, or Revoked)
- the standing line: “Perpetual license”, “Valid until
<date>”, or “Trial, N days left” - their activation key
- seat usage (“2 of 3 seats used”) and each named device with its last-used date
- a Deactivate button per device, to free a seat themselves
On a product using the deactivate seat policy, the release is budgeted: once a license has spent
its support budget for the rolling window, the buyer is told to contact the merchant. On the default lease policy it is
always free.
How it is secured
Section titled “How it is secured”The extension never talks to the license API directly. It calls a route on the Waveform app, which is the only component that holds the Shopify app secret. That route validates the customer’s Shopify session token (signature, audience, expiry) and forwards only the verified shop and customer identity over a server-to-server credential.
- A buyer’s list is scoped to their own licenses within that merchant.
- A deactivation re-checks that the device’s license belongs to that merchant and that customer before removing anything. A buyer cannot release another customer’s device.
Turning it on
Section titled “Turning it on”The menu link is not added automatically. The merchant does two things in the Shopify admin:
- Open the checkout and accounts editor and place the My Licenses page (it is listed under Apps).
- Add it to the Customer account main menu (Content → Menus), so buyers can find it.
The Waveform app’s setup guide walks the merchant through both steps and asks them to confirm that My Licenses appears in a real customer account.
Developers
Section titled “Developers”Your software does not call this page. Customers use it in a browser; your product keeps using the public API, and a seat freed on the portal is freed for your product too.