Back to the homepage
Case study 02 · 2026

The cart rebuild

A ground-up rebuild of the cart page for the same Magento 2 storefront, plus a custom upsell module that runs in the moment before checkout. Same playbook as the storefront redesign: nothing hidden, everything explained.

Magento 2 Custom module UI/UX CRO Accessibility

Before & after

drag the handle to compare.

STORE.com
New ProductsCategory ACategory BCategory CBlog
SearchCart (0)
Shopping Cart
Checkout now and earn 650 reward points for this order. Applies only to registered customers, may vary when logged in.
ItemPriceQtySubtotal
Featured product A
$129.95
1
$129.95
Featured product B
$129.95
1
$129.95
Featured product C
$103.96
1
$103.96
Starter kit A
$0.00
1
$0.00
Update Shopping Cart
Apply Discount Code ⌃
Enter discount code
Apply Discount
✓ 100% Discreet Shipping and Payment
✓ Delivered in a blank box
✓ Neutral shipping label without logo
Subtotal$363.86
Grand Total$363.86
Proceed to Checkout
GPay
Pre-Ordered Product
PRODUCT CATEGORIES
New Products
Category A
Category B
Category C
INFORMATION
Privacy Policy
Terms & Conditions
Contact Us
SECURE PAYMENT
Encrypted SSL. Payment 100% protected.
STORE
Shop All Products ⌄About UsReward PointsBlog
Search products…
Cart
Your Cart4 items
← Continue shopping
Checkout now and earn 1,820 reward points for this order.
✓ You've unlocked free discreet shipping$363.86 / $150
Pre-order · ships Oct 12
Aurora Series: The Summer Drop
[Pre-order message here]
🔖 Save for later🗑 Remove
−
1
+
$129.95
In stock · ships in 24h
Featured product B
🔖 Save for later🗑 Remove
−
1
+
$129.95
Save 20%
Featured product C
🔖 Save for later🗑 Remove
−
1
+
$129.95
$103.96
You save $25.99
Free gift
Starter kit A
Added free with your order · Qty 1
$29.95
$0.00
Order Summary
Subtotal (4 items)$389.85
Discount−$25.99
ShippingFree
Discount code
Apply
Grand Total$363.86
Proceed to Checkout
GPay
✓ Safe & secure checkout
✓ Fast, careful dispatch
✓ Easy 14-day returns
STORE.com
We use encrypted SSL security to ensure your payment information is 100% protected.
✓ Guaranteed Safe & Secure Checkout
Customer Support
Contact Us
Terms & Conditions
Privacy Policy
Company
About Us
Blog
Affiliate Program
Categories
New Products
Category A
Category B
Newsletter
Deals, restocks & tips, plus 10% off your first order.
Enter your email
Subscribe
Before
After

same cart, same items. everything that used to be hidden is now on the surface.

The problem

The cart is where money is decided, and ours treated it like a receipt. A bare table of rows: name, quantity, price. It answered none of the questions people actually have at that moment. Is it in stock? When does it ship? Did my discount apply? What am I saving? Every unanswered question is a reason to open a new tab, and people who leave carts rarely come back.

The thinking

Same principle as the storefront redesign: lay everything out. Every line item now carries a visible, high-contrast status tag: pre-order with its ship date, in stock with the dispatch window, the exact discount and what it saves. Tags are readable at a glance and accessible by design: real text, strong contrast, never color alone carrying the meaning. Nobody should have to decode a cart.

The build

Designed in Figma, then built as a custom Magento 2 module rather than a theme patch, so the cart logic (free-shipping progress, reward-points preview, gift handling, bundle pricing) lives in one testable place and survives platform upgrades. The upsell module is its own component with server-side pricing, so the discounts it promises are the discounts the order actually gets.

The decisions

No numbers yet, so here is the reasoning each one rests on.

01
Tags you can actually see

Stock status, pre-order dates and discounts used to hide in fine print. Now they are the first thing on every line item: high-contrast text badges, not color-coded mystery dots. The accessible version turned out to be the more persuasive version, which is not a coincidence.

02
Progress, not thresholds

"Free shipping over $150" is a rule. A progress bar that fills as the cart grows is a goal. Same policy, different psychology: people finish bars. When it is already unlocked, the cart says so and celebrates it instead of staying quiet about a win.

03
Rewards shown before checkout

The points program existed, but customers only learned what an order earned after paying. Moving the exact number ("earn 1,820 points for this order") into the cart turns a loyalty afterthought into a reason to finish now, and a reason to register.

04
Honest free gifts

Promo gifts used to appear as unexplained $0.00 rows, which reads as a glitch, and glitches at checkout kill trust. The gift line now says exactly what it is: added free with your order, original price crossed out, clearly not chargeable.

05
Savings made explicit

Discounted items show the math: original price struck through, new price, and a plain "You save $25.99". The order summary repeats the total savings line. If a discount is doing its job, the customer should never have to compute it themselves.

06
One cart, one job

Everything else was stripped. No banners, no unrelated recommendations inside the cart itself. Cross-sell has its own dedicated moment (below), so the cart page keeps a single job: confirm and proceed.

07
Edit, don't abandon

Quantity steppers, save for later, and a discount code field that actually expands instead of hiding behind a link. The old cart made changing your mind harder than starting over. Now it's one click, and the total updates in place.

The upsell module

A custom Magento 2 module that intercepts the moment between "Proceed to Checkout" and checkout itself, once, politely.

Before you check out
Complete your kit and save 20%
Free shipping unlocked
Offer applies to this order only
Care and Cleaning Kit
Dryer stick, antibacterial spray, powder
−20%
$24.99 $19.99
Essential B, Travel Size
Bestseller add-on, travel size
−20%
$19.95 $15.96
Bundle savings
−$9.59 · new total $402.21
Add 2 items & checkout
No thanks, continue to checkout

the modal, mid-flow. mobile gets a bottom sheet.

Why a modal, why once

Upsells inside the cart compete with checkout; upsells after payment are too late. The one honest window is the click between them. The module shows once per order, never re-arms on decline, and the "no thanks" path is one tap. Pushy upsells pay for themselves in refunds.

Relevant, not random

It offers low-cost consumables and care items that genuinely pair with what is already in the cart, the things people forget and reorder later at full shipping cost. Small ticket, high attach-rate logic, not "customers also bought" roulette.

Priced server-side

The 20% bundle price, the savings line and the new total are computed by the module in Magento, not painted on by JavaScript. What the modal promises is exactly what the order charges, including the countdown: the offer really is order-scoped.

Back to the homepage Say hello