PostHog experiment
371278
Feature flag
fp-34-paper-thickness-radio-cards
Variant key
radio-cards-with-descriptions
GTM tag
Tag 280
Test PDP
/p/1487 — Gray Marble Memorial Card
Test surface scope
Products with a visible .name_Paper_Weight block (Custom Cards / Memorial Cards). Funeral programs use .name_Cover_Weight with different options; out of scope.

1. Render check

Goal: variant transforms the dropdown into three radio cards stacked vertically. Pass.

2. Per-paper price — PDP

Goal: clicking each paper card updates the PDP price correctly. Pass.

PDP 12pt
Standard 12 pt Cover Stock
$0.39
PDP 14pt
14 pt Pearlescent Cover Stock
$0.54 Most popular (pre-selected)
PDP 17pt
Extra-Thick 17 pt Cover Stock
$0.51 Heirloom weight

3. Per-paper price — Infigo designer (fully loaded)

Goal: after clicking "CLICK TO DESIGN", the Infigo editor loads fully, the price in the editor header matches the PDP price for the selected paper, and the price also stays correct after an image is placed on the card.

Pass. Each designer capture below was taken after waiting for the editor to fully render (price element .price.title populated). On this product, placing an image is purely a design action — it does not change the price, so the "with image" prices match the "no image" prices.

Paper Designer price Designer — no image Designer — image placed
Standard 12 pt Cover Stock $0.39 Designer 12pt Designer 12pt with image
14 pt Pearlescent Cover Stock $0.54 Designer 14pt Designer 14pt with image
Extra-Thick 17 pt Cover Stock $0.51 Designer 17pt No capture (Playwright buffer issue; price reading $0.51 verified programmatically)

4. Combined-attribute pricing — PDP

Goal: paper choice still drives base price correctly when combined with other PDP attributes. Velvet and Double Thick laminates carry a fixed upcharge that's additive. Pass.

Recorded via direct DOM reads of .productPrice after each combo settled (no screenshots — table reads faster than 24 stills).

Paper Finish Final PDP price Behaviour
12pt No Lamination $0.39 +0.00 (base)
12pt Gloss Laminate $0.39 +0.00
12pt Velvet Laminate $1.99 +1.60 (premium finish)
12pt Double Thick Laminate $1.99 +1.60
14pt No Lamination $0.54 +0.00 (base + paper upcharge)
17pt No Lamination $0.51 +0.00 (base + paper upcharge)

Photo Enhancement (Yes/No) toggled with no effect on this product — image enhancement is a service flag here, not priced.

5. UX persistence — paper thickness stays visible when other attributes change

Goal: changing any other attribute (Finish dropdown, Photo Enhancement, etc.) must NOT make the paper-thickness section disappear. Pass.

This was the bug that killed the first launch on 2026-05-27. The variant used display:none to hide the original <select>; Infigo's attribute-visibility recalc inspects each block's select display and cascaded the hide to the entire .name_Paper_Weight block on the next attribute change — making the paper-thickness section vanish and never come back. Fixed in commit 9981c8e by positioning the select off-screen instead. Re-verified here.

Initial — Finish: No Lamination
Initial — Finish: No Lamination
Paper thickness section visible, cards rendered.
After change → Gloss Laminate
After change → Gloss Laminate
Paper thickness STAYS visible. This is where yesterday it disappeared.
After change → Double Thick Laminate
After change → Double Thick Laminate
Still visible after a second Finish change. Price reflects the premium finish.
Back to No Lamination
Back to No Lamination
Round-trip clean.

6. Control regression

Goal: users in the control arm (and anyone outside the experiment) see the original native dropdown, no leftover CSS, no leftover DOM. Pass.

Control arm: original Select your paper thickness dropdown
Override forced to control. Original "Select your paper thickness" dropdown rendered normally; no .fp34-cards in DOM; no CSS injected.

7. How to reproduce

Open any memorial-card PDP (e.g. /p/1487), open DevTools, paste:

posthog.featureFlags.override({'fp-34-paper-thickness-radio-cards':'radio-cards-with-descriptions'}); location.reload();

To clear:

posthog.featureFlags.override(false); location.reload();

Verdict

All sections pass. Test is QA-cleared for relaunch.