0%
Back to Showcase
E-commerce · React, A/B testing

E-commerce: CRO & Checkout Optimization

A forced login wall sat between the cart and the checkout. I removed it and shipped the replacement as an A/B test.

E-commerce: CRO & Checkout Optimization

Project Info

Client
Grutto
Timeline
2021 Q3
Role
Design and frontend implementation

Methodology

A/B TestingConversion RateAnalytics

Summary

Analytics showed people leaving Grutto's checkout immediately after entering it. The first thing they met was a login and registration screen. I designed and built the email-first flow that replaced it, and ran it as an A/B test on live traffic.

The Challenge

Everyone was stopped by a login wall before giving an address or seeing a shipping cost.

Removing accounts was not an option: returning customers rely on saved details, and the order system expects a customer record.

My hypothesis: the password is the barrier, not the account. Ask for an email first, then decide what to request based on the answer.

The constraint

Analytics showed people leaving immediately after clicking through to checkout. The first thing they met was a login and registration screen, before they had given an address or seen a shipping cost. Removing accounts entirely was not an option: returning customers rely on saved details, and the order system expects a customer record.

My hypothesis: the password is the barrier, not the account. Ask for an email first, and decide what to request next based on the answer.

What I decided

I replaced the login wall with a single email field that routes on what the system already knows. Nobody is asked to remember a password until there is a reason to believe they have one.

Email first

One field. No choice between logging in and registering, because that choice is the shop's problem rather than the customer's.

Routing on the result

The address is checked against existing customers, and the flow branches on the answer.

  • Recognised: then, and only then, a password is requested.
  • Not recognised: straight to the address form with the email already filled in.
Optimized User Flow

What I built

I designed the flow and wrote the React for it: the email step, the branch to password or address, the validation and error states on both paths, and a progress indicator across the five checkout stages.

The stepper: Cart, Details, Shipping, Payment, Confirmation. A checkout that now branches part way through needs to say where it is, or the branch reads as an error.

Error states: a wrong password on a recognised address and a rejected address on a new one are different problems, and they needed to fail differently.

Clean, minimalist stepper design showing checkout progress

How it was decided

The old flow was not replaced on my opinion. It ran against the new one as an A/B test on live traffic.

A, control: the existing login and register screen.

B, test: email first, then routing.

B won on progression to the shipping and payment stages, and it is the flow the shop runs today.

Checkout Login FlowCheckout Login FlowCheckout Login Flow

Where it stands

The email-first flow won its test and shipped permanently. It is what customers meet at grutto.com today.

The conversion numbers behind that decision are Grutto's data and I do not have permission to publish them. I would rather say that than put a percentage on this page that I cannot show you.

© 2026 Hossein Hashemi. All rights reserved.