Modules

Products and Store

Edit page
Configure a storefront for digital products and services with checkout, delivery, and invoice integration.

The products layer, published as @nuxt-customer-portal/products, provides one provider-owned store with localized products, categories, prices, checkout, purchase history, and protected files. Products may be free or paid, digital or service-based, and published only after their required content, media, prices, and files are complete.

Store setup

Administrators configure the store under /admin/products/settings:

  • General settings control whether the store is open, sandbox or live mode, languages, currencies, tax behavior, and image requirements.
  • Styles control the storefront and Markdown presentation.
  • Stripe stores organization-specific credentials only when Stripe is not supplied by the deployment environment.
  • Storage configures local-compatible S3 or Bunny storage for product images and purchased files.

New stores start in sandbox mode. Sandbox checkout tests successful, failed, and expired payments without Stripe. Switch to live mode only after Stripe, webhook delivery, storage, email, tax, and invoice settings have been verified.

Catalog and purchases

Product administration supports localized content, stable category assignments, multi-currency prices, image-purpose crops, downloadable files, publish checks, and previews. The public store exposes published products and creates immutable order snapshots so later catalog edits do not rewrite purchases.

Clients see their purchases under /purchases. Purchase details open in a drawer with the order reference, price, date, invoice action, next steps, and downloadable files. Anonymous checkout creates or links a private client by verified email and can invite that customer into the portal.

Stripe and delivery

Paid checkout uses Stripe Checkout and the signed webhook at /api/store/webhooks/stripe. Configure the webhook for the payment and checkout events listed in Store settings. Processing is idempotent: repeated events reuse the order, payment, delivery, email, and integration records.

Digital delivery requires configured storage. Free products use the normal purchase-confirmation and delivery flow without Stripe or an invoice.

Invoice integration

Install the invoice-products layer, published as @nuxt-customer-portal/invoice-products, with Products and Invoices. A completed paid order creates one sales invoice from its immutable lines and payment. Refunds create linked credit notes without rewriting the original invoice. Complete the invoice sender, numbering, tax, and transactional email configuration before opening the live store.

Composition

portal.config.ts
layers: [
  '@nuxt-customer-portal/preset',
  '@nuxt-customer-portal/invoices',
  '@nuxt-customer-portal/products',
  '@nuxt-customer-portal/invoice-products'
]

Add Planning after Products when services need bookable appointments.