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
Sign in to the Dashboard.
In the left sidebar, expand Travel, expand Add, then click Add Activity.
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
Click the Pricing tab in the page tab bar.
Click + Add attribute. The first attribute editor card opens.
Enter:
- Name:
Departure Time - Type:
Single-select - Options: click + Add option twice and enter
Morning (08:00)andAfternoon (13:30).
- Name:
Click + Add attribute again. Enter:
- Name:
Cabin Class - Type:
Single-select - Options:
Standard,Deluxe.
- Name:
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
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.
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.
- SKU — auto-suggested from the activity code + attribute values
(e.g.
(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.
Step 5 — Add policies and SEO (optional but recommended)
- Click the Logistics tab. Add cancellation, refund, and inclusion policies — pick from templates or write custom text.
- Click the SEO tab. Fill Meta title, Meta description, and Slug. The SEO score widget on the right sidebar reflects coverage.
Step 6 — Publish
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.
- Published Status:
Click Save in the top-right action bar.
On success, you're redirected to the activity list with a green toast: "Activity created successfully."
Step 7 — Verify on the storefront
- 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). - 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
- Apply a promotion to this product
- (Coming soon) Bulk-edit prices across an attribute via the Pricing tab's bulk action menu.