FP-56 · Empty Basket — single-variant design-reload nudge for logged-in users (CSS DOM-gate) · Trello card → · All wireframes →
CONTROL — the empty Basket page exactly as it ships today on funeralprints.com/cart
FREE SHIPPING On Orders Over $100Overnight DeliveryMon-Fri 9am-10pm EST
AccountLogout1-800-774-4313
Prayer Cards Programs Posters Books
Basket

Basket

Your Basket is empty!
Why we’re testing this:
  • The empty-Basket page currently has one line of copy — “Your Basket is empty!” — and nothing else. No “Continue shopping”, no recovery hint, no action.
  • Anecdotally, logged-in users sometimes see an empty Basket immediately after a designer session — even though nopCommerce stores Basket items server-side for logged-in users and the site already has a Save Basket feature. A page reload appears to re-fetch the item.
  • The variant adds a single, plain-language nudge: “Missing a design? Reload the page to bring it back.” plus a Reload Page button that calls window.location.reload(). Copy is grounded in words that already exist on FP’s site (“Basket”, “design”, “page”).
Source — live empty Basket DOM: <div class="shoppingcart__empty"><div class="catfish-container">Your Basket is empty!</div></div> — verified funeralprints.com/cart on 2026-05-12. PostHog injection selector: .shoppingcart__empty .catfish-container.
VARIANT — single line of copy plus a catfish-button styled Reload Page CTA, injected below the existing “Your Basket is empty!”.
FREE SHIPPING On Orders Over $100Overnight DeliveryMon-Fri 9am-10pm EST
AccountLogout1-800-774-4313
Prayer Cards Programs Posters Books
Basket

Basket

Your Basket is empty!
Missing a design?

Reload the page to bring it back.

Reload Page
Copy verification — every word grounded in funeralprints.com vocabulary: “Basket” — page <title>Basket</title>, H1, and existing Save Basket button. “design” — PDP CTA CLICK TO DESIGN, Infigo designer URL /CF/DynamicProduct/Editor/.... “Reload” / “page” — generic UI vocabulary; no numerical or claim-bearing language. The Reload Page button uses the existing catfish-button class so it inherits site styling natively. Verified at funeralprints.com/cart.
Behaviour:
  • Click handler: window.location.reload().
  • Injected only when .shoppingcart__empty exists in DOM (so it never shows on a populated cart).
  • Audience: logged-in users only. Gate is enforced via CSS in the variant HTML: body:has(.navbar-end.is-shown a[href*="/login"]) .v-callout-fp56-gate{display:none!important}. When the visible navbar shows a Login link (logged-out state), the callout is hidden. PostHog feature-flag filters can't gate this (project has zero person properties), so we ship the gate inside the transform.

Hypothesis

By adding a one-line nudge plus a Reload Page button on the empty Basket page for logged-in users, we will recover a small share of designer-→-empty-Basket drop-offs — because the Basket sometimes appears empty after a designer session even though nopCommerce persists the item server-side for logged-in users, and users currently see no hint that a reload might restore it. Logged-in gating is enforced via a CSS rule inside the variant HTML (see Audience).

Single-variant test (50/50 Control vs Variant). Every word in the variant is grounded in vocabulary already on funeralprints.com. No invented numbers, no borrowed claims, no promises about recovery behavior.

3
Impact
4
Confidence
9
Ease
16
ICE total
3 + 4 + 9 = 16 / 30 (sum, not product)
CART Logged-in only (CSS DOM-gate) Empty Basket only Copy + 1 button PostHog web exp. No Infigo deploy

Primary metric: FP โ€” Purchase (cart → purchase) — funnel gated to /cart pageview, sales-based (HARD rule: primary must be sales, gated to change-page)
Secondary metrics: FP โ€” Reached checkout (cart → begin_checkout) (cart-gated funnel), FP โ€” Revenue per visitor (mean metric, can't be funnel-gated)
Guardrails: overall purchase rate, AOV, bounce rate on /cart (must not drop)
Sample size: narrow audience — expect 6–8 weeks at ~1,200 sessions/day for ±15% MDE on the recovery rate. Confirm baseline once empty-Basket insight is set up in PostHog.
Audience: URL contains /cart, .shoppingcart__empty exists, user is logged in (enforced via CSS DOM-gate inside the variant HTML: body:has(.navbar-end.is-shown a[href*="/login"]) hides the callout when a visible Login link exists). Desktop + mobile, all geos.
Selector for injection: .shoppingcart__empty .catfish-container — append HTML after existing “Your Basket is empty!” text.
Source page audited: /cart

Pre-launch checks: