Reminding users what they were buying at the moment of payment: the checkout features bottom sheet
On the SpeakX checkout, users were dropping at the moment of commitment. The price was visible. The CTA was visible. The value, what the subscription actually included, wasn't reinforced anywhere on the screen. I designed a non-blocking bottom sheet that surfaced premium features at the checkout moment, anchored beneath the price, swipe-dismissible. The A/B lifted order creation by 79.8% and payment success by 7%, and the test was scaled to 100% rollout.
A funnel with two leaks: the mechanism of payment, and the motivation to pay.
The UPI-first checkout case study covers the first leak: the gateway picker was fighting India's default payment habit. This case is about the second leak, sitting on the same screen. Even when the payment mechanism was clean, a meaningful chunk of users still hesitated at the price block. They had reached the most expensive screen in the funnel, with the strongest intent of any prior step, and the screen offered them no reason in that moment to remember why they'd come.
The two pieces of work were complementary: UPI-first fixed the mechanism, the features bottom sheet fixed the motivation. Both attacked different parts of the same drop curve.
Users reached the price screen, and a large fraction never tapped Pay.
The pre-redesign checkout showed the plan name, the price, a set of payment options, and a primary CTA. That was the entire screen. Nothing on it answered the question a hesitating user is silently asking: what exactly am I paying for, again?. The features were buried two screens back, in marketing surfaces the user had already scrolled past on their way down the funnel.
Session replays showed a recurring micro-pause: users would land on checkout, look at the price, scroll up, scroll back down, and either tap Pay or back out. The scroll-up was the user trying to remember the value proposition. We had a screen that asked for money without answering, in that exact moment, why.
Add context without spending the user's attention budget.
- The CTA had to stay above the fold. Anything that pushed Pay below the fold would directly cost clicks. The fix could not displace the primary action.
- Bottom sheets are easy to abuse. Used carelessly they become noise: every screen pops one, users start dismissing them reflexively without reading. This sheet had to earn its space, appear at the right moment, and stay out of the way once dismissed.
- No blocking overlays. Anything that interrupted the path to Pay would read as friction. The user came to this screen ready to transact; we were reinforcing, not gating.
- 3-second scan budget. Whatever sat in the sheet had to be parseable at a glance: feature, icon, one line. No paragraphs. No marketing prose.
Intent decays between the marketing screen and the price screen.
I watched [X] session recordings of users who reached the checkout and dropped without paying. The pattern wasn't price shock. It wasn't a payment-method issue either (that was the parallel UPI investigation). It was a content gap: the user had been told, two minutes ago on a marketing surface, that they'd get AI practice, grammar coaching, video reels and daily routines. By the time they hit the price screen, that list had decayed in working memory. They were now staring at a number with no fresh reason to attach to it.
The hypothesis was small: re-surface the value, in the user's eyeline, at the moment of commitment. Not as a sell. As a reminder.
"I forgot what was inside it. I scrolled up to check, then I closed it."
Trial user, ₹199 plan, watching her own session replayThe reframe. Treat checkout not as a transaction screen but as the last beat of the value story. The price isn't the payload, the features are. The price is just the cost of access.
A peek sheet that reminds, then disappears.
The shipped behaviour was deliberately small:
- The sheet appeared in its peek state on first render of the checkout, anchored beneath the price card. The CTA remained above the fold and fully tappable.
- Four features (AI practice, grammar, video reels, daily routines), each a single line with a leading icon. No paragraphs. No marketing copy.
- Swipe-down dismisses. Tap-on-CTA implicitly dismisses. The sheet did not re-appear within the same checkout session once dismissed.
- On expand, the sheet revealed a slightly longer description per feature, capped at one short sentence. The expand was optional, not required, the peek state alone carried the message.
The trade-off I accepted explicitly: a sheet on the checkout, even a polite one, is still surface area. It costs a small amount of visual weight on the most important screen in the app. The bet was that the reminded users would convert at a high enough rate to justify the cost, and that the swipe-dismiss escape was strong enough to protect users who didn't need it. The A/B confirmed the bet.
What shipped, what got cut, and what made it to v2.
What shipped in v1. The peek-state bottom sheet on Android and iOS, with four static features, swipe-dismiss, and per-session persistence of dismissal. Released to a 50/50 A/B against the unmodified checkout, on production traffic, for a fixed window long enough to clear the analyst's significance bar.
What didn't. Personalised features by user-declared learning goal (interview prep vs. school vs. travel) was descoped to v2. The sheet was static across cohorts in v1, which meant we were leaving lift on the table for users whose primary motivation didn't match the headline feature.
v2 targets. Goal-personalised feature ordering, a "see all features" expansion that links to a deeper marketing surface for hesitant users, and a renewal-flow variant tuned for users who already know the product.
Measured on the A/B cohort, scaled to 100%.
Honest framing. A +79.8% lift is one of the largest single-design lifts in SpeakX's A/B history, but it sits on a low absolute base: the pre-test order-creation rate was small, so a lift of this size moves the absolute number by a meaningful but still-small amount. The headline is the relative lift. The work it pointed to was that the absolute conversion at this step was lower than it should be, and there was room for design to move it.
"Nobody had pushed on the checkout as a content surface before. The sheet earned its place because it stayed out of the way once dismissed, and the data made the argument for us."
Nikita · Product Manager, SpeakXWhat I'd do differently. What I'll carry forward.
What I'd do differently. I'd have shipped the goal-personalised variant in v1. The static four-feature sheet performed because any reminder beat no reminder, but the lift on a personalised version would almost certainly have been larger. We left a compounding lever on the v2 backlog because the personalisation pipeline wasn't ready, and the right answer was probably to delay v1 by a sprint, not to ship the static version.
What I underestimated. How well a non-blocking surface can do work that a blocking surface can't. Direction B was, on paper, the most "informative" option: a full-screen modal can show the most content. In practice, every additional unit of friction at the moment of commitment is taxed harder than I'd expected. The sheet won not because it said more, but because it cost less.
What I'll carry forward. Bottom sheets aren't a default tool. They earn their space when they're contextual, dismissible, and in the user's eyeline at exactly one moment. Used otherwise, they're noise. This one earned it because it answered a question the user was already silently asking on that screen.