# ThanksEasy: Magento 2 Thank You Page Customisation

> Build a branded Magento 2 thank you page with personalised messages, countdown discount offers, cross-sell blocks, and delivery date estimates.

---

## Overview

ThanksEasy turns the Magento 2 thank you page into a customisable, conversion-focused experience. The moment a customer completes checkout they land on a page that can greet them by name, show order details, display a countdown-backed discount offer, present targeted upsell products, and link directly to shipment tracking.

![ThanksEasy thank you page overview](images/overview.png)

This module helps you:

- Make the order-success page feel like a brand touchpoint rather than a dead end
- Generate incremental revenue with time-limited discount offers and cross-sell or BOGO product blocks
- Reduce customer-service enquiries by surfacing shipping timelines and tracking links immediately after purchase
- Track every click from the success page in Google Analytics with configurable UTM parameters

---

## When to use this

Use ThanksEasy when you want to:

- Greet customers with a personalised thank-you message that includes their order number and a link to their order
- Show a fullscreen promotional popup or an inline product block with a ticking countdown discount
- Display a "Shipped By" and "Delivered By" date estimate so customers know when to expect their order
- Offer a calendar download or QR code so customers can track delivery without contacting support
- Measure which success-page offers actually convert using Google Analytics UTM tracking

---

## Key capabilities

- **Branded page design** - custom background image, tiled pattern, solid colour, confetti animation, and custom CSS
- **Personalised success message** - editable copy with order-ID, order-link, PO-number, and emoji shortcodes
- **Fullscreen popup offer** - cross-sell or BOGO product strategy with percent/fixed discount and auto-close timer
- **Inline product blocks (Section 1 and Section 2)** - cross-sell grid, single featured product, or custom CMS/HTML block, each with independent discount and countdown
- **Order details panel** - ordered items, shipping address, paid-with method, Shipped By Date, and Delivered By Date
- **Calendar and QR tools** - Apple Calendar (.ics) download, Google Calendar link, and TrackEasy QR code on the Delivered By tile
- **Instant Buy button** - customisable labels for Instant Purchase-eligible and non-eligible products
- **Time-limited free shipping** - cart-level free shipping with an expiry clock; integrates with Magento's Delivery Methods config
- **Google Analytics UTM tagging** - configurable source, medium, and campaign for promo and non-promo product clicks
- **Live preview** - enter any order ID in config to preview the page without placing a test order

---

## Installation

ThanksEasy installs via Composer, then activates with a license key from your Moogento.com account. The whole flow takes about 5 minutes.

### Step 1: Get your Composer keys from Moogento.com

1. Sign in at **https://www.moogento.com** and open **My Plugins** in your account menu.
2. Find **ThanksEasy** in the list of plugins you own.
3. Generate (or reveal) the Composer access keys for that plugin - a **public key** and a **private key**.
4. **Add your install domain to the key.** Each Composer key is tied to a specific domain - if you're installing on `yourstore.com`, add `yourstore.com` to the key's allowed domains. The Composer download will be rejected on any other domain.

If you run staging and production on different domains, add both - separate keys per environment are fine too.

### Step 2: Install the module with Composer

From your Magento 2 root directory:

```
composer require moogento/m2-thankseasy
```

When Composer asks for credentials, paste the **public key** as the username and the **private key** as the password. They'll be cached in `~/.composer/auth.json` for future runs.

### Step 3: Enable the module in Magento

```
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean
```

Run `php bin/magento module:status Moogento_Thankseasy` to confirm it is listed as enabled.

### Step 4: Add your license key in the Moogento admin

1. Still on **https://www.moogento.com > My Plugins**, copy the **license key** for ThanksEasy (separate from the Composer keys).
2. In your Magento admin, go to **Stores > Configuration > Moogento > Licenses**.
3. Find the row for **ThanksEasy** and paste the license key.
4. Click **Save Config**, then run `php bin/magento cache:clean` once.

The license validates within a few seconds. If the module stays inactive, check that the domain on your license matches the domain you installed on - domain mismatch is the most common cause.

---

## Setup overview

All ThanksEasy configuration lives in:

**Stores > Configuration > Moogento > ThanksEasy**

You'll mainly work with:

- **General** - enable the module, button labels, free-shipping offer, offer expiry
- **Fullscreen Popup Offer** - popup product strategy, discount, display limits
- **Thanks Page > General** - page background, confetti, custom CSS
- **Thanks Page > Top Section** - success message content and colour
- **Thanks Page > Order Details Section** - which order info blocks appear
- **Thanks Page > Page-base Section 1 and Section 2** - inline product/content blocks with discounts
- **Google Analytics** - UTM parameters for click attribution

---

## Common setups

### Display a personalised thank-you message with the order number

Customers want confirmation that their order went through - a message with their order number removes doubt.

#### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: Top Section

2. Set:
   - **Thanks message: Position** = your preferred position (above or below the order details)
   - **Thanks message: Content** = your message copy, using template variables:
     - `{{order_id}}` - inserts the order increment ID (e.g. `#100000042`)
     - `{{order_link}}` - a URL to the order detail page; use as an `href` value
     - `{{purchase_order_id}}` - PO number if set, otherwise empty
     - `{{tick}}` - a green tick icon
     - `{{email}}` - an email icon
     - `:)` `:D` `<3` - emoji shortcodes

3. Save config and run `php bin/magento cache:clean`

#### Notes

- For guest orders, `{{order_link}}` falls back to `#<incrementId>` since guests cannot log in to view the order
- Use `{{purchase_order_link}}` only outside an `href` attribute - it renders a complete `<a>` element

---

### Show a fullscreen popup offer immediately after checkout

A fullscreen popup with a time-limited discount is the highest-visibility upsell placement ThanksEasy provides.

![Fullscreen Popup Offer config](images/config-popup.png)

#### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Design: Fullscreen Popup Offer

2. Set:
   - **Enable** = Yes
   - **Offer: Offered product strategy** - choose one:
     - *Cross-sell* - products linked as cross-sells to items in the order
     - *BOGO* - one of the products already in the order
     - *Cross-sell then BOGO* - cross-sells first; falls back to BOGO if none qualify
   - **Discount: Type** = Percent or Fixed
   - **Discount: % Amount** (or Fixed amount) = your discount value
   - **Popup: Duration** = minutes before auto-close (default 1)
   - **Limits: Per customer per day** = Yes to prevent repeat displays

3. Optionally set:
   - **Filter-in by: Product attribute** - restrict offered products by any product attribute
   - **Filter-in by: Category** - restrict to products in specific categories
   - **Filter-in by: Minimum final price** - skip products below a price threshold
   - **Offer text for: Cross-sell products** / **Offer text for: BOGO products** - customise the headline using `{{product_name}}`, `{{discount}}`, `{{price}}`, `{{countdown}}`

4. Save config

#### Notes

- If no qualifying products are found (all out-of-stock, missing images, or priced at $0 after discount), the popup is suppressed rather than shown empty
- Popup and countdown features are gated by your license plan - confirm your plan on moogento.com if these fields are greyed out

---

### Add inline cross-sell or featured-product blocks below the order details

The page-base sections let you add a product grid or a single featured product directly on the thank-you page, each with an independent discount and countdown.

![Page-base Section 1 config](images/config-page_layout_base_1.png)

#### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: Page-base Section 1

2. Set:
   - **Enable** = Yes
   - **Which: Block** - choose *Cross-sell products*, *Single product*, *CMS block*, or *HTML*
   - For *Cross-sell products*: set attribute/category filters, product count (default 4), and whether to fill empty slots with random in-stock products
   - For *Single product*: enter the product SKU and choose button action (*Add to Cart* or *View Product*)
   - **Discount: Type** = Percent, Fixed, or None
   - **Discount: Countdown timer** = Yes to show a countdown clock; set **Countdown time limit** in minutes (default 5)
   - **Limits: Per customer per day** = Yes to avoid repeat discounts

3. Optionally configure **Design: Page-base Section 2** for a second independent block below Section 1

4. Save config

#### Notes

- Title fields change based on discount and countdown state - there are separate fields for: *Discounts during countdown*, *Discounts after countdown*, *Discounts no countdown*, and *No discount*
- Use `{{countdown_promo}}` in the title to render the animated countdown clock (ThanksEasy Pro) or a fixed number
- Discounts applied via ThanksEasy are time-limited: customers have the duration set in **General > Time limit** (hours) to complete checkout before prices revert

---

### Show delivery timeline and calendar tools

Telling customers exactly when to expect their order - right on the success page - reduces "where is my order?" emails.

![Order Details Section config](images/config-page_layout_order_details.png)

#### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: Order Details Section

2. Set:
   - **Enable** = Yes
   - **Show section: Shipped By Date (SBD)** = Yes; set **SBD: Period from order** in days (default 5)
   - **Show section: Delivered By Date (DBD)** = Yes; set **Delivered By: Period from order** in days (default 14)
   - **DBD tools: + Apple Calendar** = Yes to add an `.ics` download button for the Delivered By date
   - **DBD tools: + Google Calendar** = Yes to add a Google Calendar link
   - **DBD tools: Track/QR in Delivered By** = Yes to show a tracking icon; if **TrackEasy** is installed, hovering reveals a QR code preview and clicking opens the TrackEasy tracking page

3. Optionally set guide copy:
   - **Show section: 'Shipped By Date (SBD)' guide** = Yes and fill in **Content** with plain-language copy explaining your shipping process
   - **Show section: 'Delivered By Date (DBD)' guide** = Yes and fill in **Content** with delivery-estimate context

4. Save config

#### Notes

- Shipped By and Delivered By dates are estimates calculated from the order date - they are not connected to carrier APIs unless TrackEasy is also installed
- To suppress the country name from the shipping address (useful for single-country stores), set **Shipping info: Hide this 'country name'**

---

### Enable time-limited free shipping on the success page

Offer free shipping as an incentive to add another item within a short window after purchase.

#### How to set it up

1. First, activate the shipping method:
   - Go to **Stores > Configuration > Sales > Delivery Methods**
   - Find **ThanksEasy Free Shipping** and set **Enabled** = Yes

2. Then configure the offer:
   - Go to **Stores > Configuration > Moogento > ThanksEasy > General**
   - Set **Discounts: Enable time-limit on free shipping?** = Yes
   - Set **Discounts: Time limit** = number of hours the offer remains valid (default 1)

3. Save config

#### Notes

- When the time limit expires, the free shipping is automatically removed from the cart and product prices revert to normal
- The countdown affects both the fullscreen popup offer and the page-base inline blocks simultaneously

---

### Set up Google Analytics UTM tracking

Every product link on the success page can carry UTM parameters so you can measure which offer generates revenue.

#### How to set it up

1. Go to:
   Stores > Configuration > Moogento > ThanksEasy > Setup: Google Analytics

2. Set:
   - **General: utm_source** - identifies ThanksEasy traffic (default: `thankseasy`)
   - **General: utm_medium** - identifies the link type (default: `cta`)
   - **Promo products: utm_campaign** - campaign name for discounted product clicks (default: `TX pro`)
   - **Non-promo products: utm_campaign** - campaign name for non-discounted product clicks (default: `TH reg`)

3. Save config

#### Notes

- UTM settings are global (not per store view)
- Changes only apply to links generated for new orders - existing cached pages are not affected

---

## Features reference

### Confetti animation

- Plays a falling-confetti animation on page load to celebrate the purchase
- Toggle at: **Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: General > Show: Confetti**
- Works on Luma, Porto, and Hyvä themes

### Page background

- Supports three modes: **Full** (single image or built-in ThanksEasy design), **Tiled** (repeating pattern), and **Color** (solid hex colour)
- Custom image upload available for both full and tiled modes; accepted formats: PNG, GIF, JPG, JPEG
- Config path: **Design: Thanks Page > Design: General > Page: Background**
- On Hyvä, background mode values are stored as strings (`full`, `tiled`, `color`) - do not re-save this field from a non-Hyvä admin session if the value has been customised for Hyvä compatibility

### Custom CSS

- Paste arbitrary CSS into **Design: Thanks Page > Design: General > Custom CSS** to override colours, fonts, or layout without editing template files
- The config field includes examples for changing countdown timer colours and background-image behaviour

### Instant Buy button labels

- The buy button label differs based on whether Instant Purchase is available for the customer
- **Buy button label: Instant Buy** - shown when Instant Purchase is enabled (e.g. "Instant Purchase", "Buy Now")
- **Buy button label: Add to Cart** - shown when Instant Purchase is not available (e.g. "Add to Cart", "Get It!")
- Config path: **General**

### Live preview

- Enter any order increment ID in **Design: Preview > Preview order id** to load the thank-you page for that order without navigating through checkout
- Useful for checking layout and copy changes before customers see them

---

## Advanced configuration

### TrackEasy integration

#### What it does

When **TrackEasy** is installed and enabled, ThanksEasy embeds a tracking link and optionally a QR code directly in the Delivered By tile. Customers can scan the QR code on mobile to open the TrackEasy tracking page without having to search their email for a tracking link.

#### Setup

1. Install and enable the **TrackEasy** module (sold separately)
2. In ThanksEasy config, go to **Design: Thanks Page > Design: Order Details Section**
3. Set **Show section: Tracking** = Yes
4. Set **Include: TrackEasy QR code** = Yes to add the QR code alongside the tracking link
5. Set **DBD tools: Track/QR in Delivered By** = Yes to show the tracking icon on the Delivered By tile

#### Notes

- If TrackEasy is not installed, the tracking icon falls back to Magento's standard order-tracking/guest-form link
- QR codes are generated from an external image service, so the store needs outbound HTTPS to display them

### Swissup Sold Together integration

ThanksEasy can render a **Sold Together** block (from Swissup's Sold Together extension) as the content for a page-base section. This is configured by selecting the Sold Together block type when setting up Section 1 or Section 2 - no additional settings are required beyond having the Swissup module installed and configured with product associations.

---

## Theme compatibility

ThanksEasy is compatible with **Luma**, **Porto**, and **Hyvä** themes.

- **Luma**: full support; all blocks render using standard Magento layout handles
- **Porto**: full support; the enhanced page layout works within Porto's checkout success handle
- **Hyvä**: full support; background mode values (`full`, `tiled`, `color`) are stored as strings - the module preserves these values and does not cast them to integers, which would prevent the configured background from rendering

If you switch between Hyvä and a non-Hyvä theme on the same store, re-check the **Page: Background** setting and save it from the correct theme context to ensure the stored value matches what the active theme expects.

---

## Tips & best practices

- Keep the **Discounts: Time limit** short enough that you can still combine shipments - 1 hour is the default
- Use **Limits: Per customer per day** on all discount blocks to avoid customers feeling they are being aggressively upsold on every visit
- For cross-sell popups, set a **Minimum final price** filter to avoid offering very low-value products as the main post-purchase pitch
- Write countdown title copy that conveys urgency without sounding artificial - `Get {{discount}}% off before {{countdown_promo}} runs out` converts well
- Use the live **Preview order id** field to review every config change before saving; you can iterate quickly without placing test orders
- Set per-store-view translations for the success message and block title fields if you operate in multiple languages - the config is store-view scoped

---

## Troubleshooting

### The popup or countdown fields are greyed out in the admin

Popup and countdown features require a higher license tier.

- **Check:** Go to **Stores > Configuration > Moogento > Licenses** and confirm ThanksEasy is showing as active on your current domain
- **Resolution:** Upgrade your ThanksEasy plan on moogento.com, or verify your license key is entered correctly for the right domain

---

### The Delivered By date is wrong

The Delivered By date is calculated as a fixed number of days from the order date, not from a carrier API.

- **Cause:** The default offset (14 days) may not match your actual fulfilment time
- **Check:** Go to **Design: Order Details Section > Delivered By: Period from order**
- **Resolution:** Change the value to match your average delivery window; for carrier-accurate dates, install **TrackEasy**

---

### The background image is not showing on Hyvä

Hyvä stores the background mode as a string value; re-saving from a non-Hyvä context can overwrite it with an integer.

- **Cause:** The `general_background_yn` config value was cast to an integer, which Hyvä does not recognise
- **Check:** Go to **Design: Thanks Page > Design: General > Page: Background** and note the current value
- **Resolution:** Re-select the desired background mode and save config from the Hyvä-themed store view; run `php bin/magento cache:clean`

---

### Cross-sell products not appearing in the popup or page blocks

The popup and inline blocks apply several filters before displaying a product.

- **Cause:** All candidate products were filtered out (out-of-stock, missing product image, discounted price would reach $0, or below the minimum final price threshold)
- **Check:** Verify the ordered products have cross-sell associations set in the product catalogue, that those products have images, and that they are in-stock
- **Resolution:** Add at least one qualifying cross-sell, or switch the strategy to BOGO if cross-sell associations are sparse; lower or disable the minimum final price filter if it is excluding valid products

---

### The free-shipping offer is not applying in the cart

The ThanksEasy Free Shipping carrier must be enabled separately in Magento's Delivery Methods.

- **Cause:** The carrier was not enabled in Delivery Methods, or the time limit has already expired
- **Check:** Go to **Stores > Configuration > Sales > Delivery Methods** and confirm **ThanksEasy Free Shipping** is set to Enabled = Yes
- **Resolution:** Enable the carrier, save, and clear cache; remind customers the offer is time-limited

---

## FAQs

<!-- seo: FAQPage schema - the page converter should emit JSON-LD for this section -->

## How do I customise the thank-you message shown after checkout?

Go to **Stores > Configuration > Moogento > ThanksEasy > Design: Thanks Page > Design: Top Section** and edit the **Thanks message: Content** field. You can include the order number with `{{order_id}}`, a link to the order with `{{order_link}}`, icons like `{{tick}}`, and emoji shortcodes such as `:)`.

## How do I show a discount offer to customers right after they place an order?

Enable either the **Fullscreen Popup Offer** group or one of the **Page-base Section** groups in ThanksEasy config. Set the offered-product strategy (Cross-sell or BOGO), choose Percent or Fixed discount type, and enter the discount value. Popup and countdown features require a Growth or higher license plan.

## Does ThanksEasy work with Hyvä theme?

Yes, ThanksEasy is fully compatible with Hyvä. Background mode values are stored as strings (`full`, `tiled`, `color`) and the module preserves them so the correct background renders on Hyvä. See the Theme compatibility section for details on switching between themes.

## Does ThanksEasy work with Porto theme?

Yes, ThanksEasy is fully compatible with Porto. The enhanced success-page layout works within Porto's checkout success layout handle without any additional configuration.

## How do I add a calendar download so customers can save their delivery date?

In the **Design: Order Details Section** config group, enable **Show section: Delivered By Date (DBD)** and then set **DBD tools: + Apple Calendar** = Yes for an `.ics` download, and **DBD tools: + Google Calendar** = Yes for a Google Calendar link. Customers will see those buttons next to the Delivered By date on the success page.

## Can I show a QR code for shipment tracking on the thank-you page?

Yes - install **TrackEasy** (sold separately) alongside ThanksEasy, then set **Show section: Tracking** = Yes and **Include: TrackEasy QR code** = Yes in the Order Details Section config. Customers can scan the QR code on mobile to open their tracking page immediately.

## What happens to the discount if the customer does not complete checkout in time?

When the countdown expires (controlled by **General > Discounts: Time limit**), the free shipping is automatically removed from the cart and any ThanksEasy-discounted product prices revert to their normal prices. Customers can still check out, just without the offer applied.

## How do I stop the popup from appearing to the same customer every day?

Set **Limits: Per customer per day** = Yes in the **Fullscreen Popup Offer** group. When enabled, each customer will only be shown the discounted popup offer once per day.

## Can I preview the thank-you page without placing a test order?

Yes. Enter an existing order increment ID in **Stores > Configuration > Moogento > ThanksEasy > Design: Preview > Preview order id** and the thank-you page will load for that order, so you can review layout and copy without going through checkout.

## Which Google Analytics data does ThanksEasy send?

ThanksEasy adds UTM parameters to every product link on the success page. You can configure `utm_source`, `utm_medium`, and separate `utm_campaign` values for discounted and non-discounted product links at **Stores > Configuration > Moogento > ThanksEasy > Setup: Google Analytics**. Changes only apply to links generated for orders placed after you save.

---

## Related guides

- **TrackEasy** - carrier-accurate delivery tracking with a branded tracking page; integrates directly with ThanksEasy's QR code and Delivered By tile

---

## Need help?

- moo@moogento.com
- Include:
  - Magento version
  - ThanksEasy version
  - Theme name (Luma, Porto, or Hyvä)
  - What you are trying to do
