Table of Contents

Create a product with attributes & variations

Note

This guide uses Travel → Activity as the example product type because it exposes the full attribute + variation editor. The same flow applies to other Travel product types (Transport, eSIM). The Ecommerce Products form uses a simpler Size/Colors flat layout — see the Ecommerce product guide (coming soon) for that flow.

Outcome: an active, published Travel activity titled "Halong Bay Day Cruise" with two attributes (Departure Time, Cabin Class), four priced variations visible on the storefront.

Time: ~10 minutes. Permission: Manager role on the tenant.

Before you start

You need:

  • A tenant with the Travel module enabled.
  • At least one Category and Destination already created. If yours has none, create them first under Travel → Configuration → Categories and Travel → Configuration → Destinations.
  • The cover photo and gallery images for the activity (JPG/PNG, ≤ 2 MB each).

Step 1 — Open the Add Activity form

  1. Sign in to the Dashboard.

  2. In the left sidebar, expand Travel, expand Add, then click Add Activity.

    📷 Sidebar: Travel → Add → Add ActivityScreenshot pending — drop file at images/01-sidebar-add-activity.png
  3. The form opens at the URL /apps/travel/add-activity. The page header shows the placeholder title "Add Travel Activity" and an empty code pill ().

Step 2 — Fill the Overview tab

The Overview tab is selected by default. Fill these required fields first:

Field Value Notes
Title Halong Bay Day Cruise The storefront-visible name.
Code HLB-DAY-01 Internal SKU. Must be unique per tenant; immutable after first save.
Category Day Tours Pick from the dropdown.
Destination Halong Bay Pick from the dropdown.
Short description One-sentence pitch shown in listings. Max 200 characters.
Long description Full marketing copy. Rich-text editor — supports headings, lists, images.
Cover photo Upload a 16:9 JPG/PNG. This is the primary tile image.
Gallery Drag-and-drop up to 12 images. Reorder with drag handles.

Leave Publish Date empty for now — we'll set the status at step 6.

Tip

The translation bar in the top-right lets you switch authoring language. A green dot means a language is fully populated; a yellow dot means it's partially translated; grey means empty. You can publish with only the default language complete and translate later.

Step 3 — Open the Pricing tab and define attributes

  1. Click the Pricing tab in the page tab bar.

    📷 Pricing tab — empty state with "Add attribute" buttonScreenshot pending — drop file at images/02-pricing-empty.png
  2. Click + Add attribute. The first attribute editor card opens.

  3. Enter:

    • Name: Departure Time
    • Type: Single-select
    • Options: click + Add option twice and enter Morning (08:00) and Afternoon (13:30).
  4. Click + Add attribute again. Enter:

    • Name: Cabin Class
    • Type: Single-select
    • Options: Standard, Deluxe.
    📷 Two attribute cards filledScreenshot pending — drop file at images/03-attributes-filled.png
Important

Attribute order matters — it controls the variation matrix column order and the storefront filter ordering. Drag the handle on each card to reorder.

Step 4 — Generate the variation matrix

  1. Click Generate variations. The variation matrix appears below the attributes card with one row per combination — in this example, four rows: Morning × Standard, Morning × Deluxe, Afternoon × Standard, Afternoon × Deluxe.

  2. For each row, fill:

    • SKU — auto-suggested from the activity code + attribute values (e.g. HLB-DAY-01-MOR-STD); edit if needed.
    • Price — the per-person price in tenant currency.
    • Inventory — leave blank for unlimited; set a number for capacity- capped variations.
    • Active toggle — leave on. Toggle off to hide a variation without deleting it.
    📷 Variation matrix with four priced rowsScreenshot pending — drop file at images/04-variations-priced.png
  3. (Optional) Set a Default variation by clicking the star icon on one row. This is the option pre-selected on the storefront.

Tip

If you change attribute options later, click Regenerate above the matrix. Existing rows are preserved by SKU; new combinations get blank rows you must price.

  1. Click the Logistics tab. Add cancellation, refund, and inclusion policies — pick from templates or write custom text.
  2. Click the SEO tab. Fill Meta title, Meta description, and Slug. The SEO score widget on the right sidebar reflects coverage.

Step 6 — Publish

  1. In the right-side Status card, set:

    • Published Status: Published
    • Publish Date: leave blank to publish immediately, or set a future date for scheduled release.
  2. Click Save in the top-right action bar.

    📷 Save and Publish actionsScreenshot pending — drop file at images/05-publish.png
  3. On success, you're redirected to the activity list with a green toast: "Activity created successfully."

Step 7 — Verify on the storefront

  1. Open a new tab and go to your tenant's storefront URL (for example, https://acme.digitalantiz.net/tours/halong-bay-day-cruise, or click the View on storefront link in the activity's right-sidebar Quick Actions card).
  2. Confirm:
    • The cover photo and gallery render.
    • Both attribute pickers (Departure Time, Cabin Class) appear.
    • The price updates when you change selections.
    • "Add to cart" / "Book now" works end-to-end.

If a variation appears with $0.00 or is missing from the picker, return to the Pricing tab and confirm the row is Active and has a non-zero Price.

Common issues

Symptom Cause Fix
Save disabled (greyed out) A required field on Overview is empty. Switch back to Overview — fields with empty-required validation show a red border.
Variations show no rows after Generate An attribute has zero options. Add at least one option to every attribute, then regenerate.
Storefront shows old prices CDN/output cache. The cache invalidates within 60 seconds of save; hard-refresh (Ctrl+F5).
Code field locked grey Code is immutable after first save. Create a new activity with the corrected code; archive the old one.

What's next