
Checkout Flow Optimization
- 95 installs
- 41 repo stars
- Updated March 13, 2026
- finsilabs/awesome-ecommerce-skills
Design a high-converting checkout with address autocomplete, smart field ordering, progress indicators, guest checkout, and express payments to cut abandonment.
About
A skill for reducing checkout abandonment through high-impact flow changes achievable via platform settings and apps. A developer uses it to lift checkout completion without custom code.
- Fixes field count, guest checkout, hidden fees, express pay
- Targets 50-60% checkout completion via platform settings
Checkout Flow Optimization by the numbers
- 95 all-time installs (skills.sh)
- Ranked #1,152 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill checkout-flow-optimizationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 95 |
|---|---|
| repo stars | ★ 41 |
| Last updated | March 13, 2026 |
| Repository | finsilabs/awesome-ecommerce-skills ↗ |
What it does
Design a high-converting checkout with address autocomplete, smart field ordering, progress indicators, guest checkout, and express payments to cut abandonment.
Files
Checkout Flow Optimization
Overview
Checkout abandonment averages 70% across ecommerce. The biggest friction points — too many form fields, no guest checkout, hidden fees revealed late, and no express payment options — are all fixable through platform settings and apps without custom code. Best-in-class stores achieve 50–60% checkout completion by applying a handful of high-impact changes.
When to Use This Skill
- When checkout abandonment rate exceeds 70% and you need to diagnose the cause
- When redesigning checkout as part of a storefront rebuild
- When integrating express checkout (Apple Pay, Google Pay, PayPal Express) into an existing flow
- When A/B testing checkout layout changes
Core Instructions
Step 1: Determine your platform and the available optimization levers
| Platform | Checkout Control Level | Best Optimization Approach |
|---|---|---|
| Shopify | Limited (Shopify controls the core flow) | Use Checkout Extensibility apps + Settings to configure; no custom HTML/CSS without Plus |
| Shopify Plus | Full control via Checkout Extensibility | Use checkout.liquid customizations + Shopify Functions + checkout extension apps |
| WooCommerce | Full control | Configure settings + use checkout optimization plugins |
| BigCommerce | Moderate control via Stencil theme | Theme customization + One Page Checkout configuration |
| Custom / Headless | Full control | Build optimized flow using Stripe Elements or platform Storefront API |
Step 2: Apply the highest-impact checkout optimizations
---
Shopify
Enable one-page checkout (Shopify's default as of 2023): 1. Go to Settings → Checkout 2. Under Checkout layout, select One-page checkout — this combines contact, shipping, and payment on a single page instead of 3 steps 3. If you are on an older theme, update to Dawn or another OS 2.0 theme that supports one-page checkout natively
Enable express checkout buttons: 1. Go to Settings → Payments 2. Under Wallets, enable Shop Pay, Apple Pay, Google Pay, and Meta Pay 3. Shop Pay has the highest conversion rate of any express payment method on Shopify — enable it first 4. Go to Online Store → Themes → Customize and add express checkout buttons to your cart page and product pages
Enable address autocomplete: Shopify uses Google Maps address autocomplete by default in checkout. Ensure it is not disabled. Go to Settings → Checkout → Customer contact and verify address autocomplete is enabled.
Remove friction from checkout fields: 1. Go to Settings → Checkout → Customer information 2. Set Full name to single-field (first + last in one field) rather than two separate fields 3. Set Company name to hidden (unless you primarily serve B2B) 4. Set Address line 2 to optional or hidden to reduce visual clutter
Enable order notes only if you need them: Go to Settings → Checkout and disable Order notes unless your store actively uses custom order instructions — unnecessary fields increase cognitive load.
Install a checkout optimization app (Shopify Plus or Standard):
- Rebuy Smart Cart: adds upsells, free shipping progress, and cart recommendations
- Checkout X: adds upsells and trust badges within the checkout flow (Plus required for checkout page customization)
- ReConvert: post-purchase optimization
WooCommerce
Enable one-page checkout: 1. Install the WooCommerce One Page Checkout plugin from WooCommerce.com 2. Configure the checkout layout to show product selection, order details, and payment on a single page 3. Alternatively, configure your WooCommerce theme (Storefront, Flatsome, Astra) to use their built-in one-page or optimized checkout template
Enable address autocomplete: 1. Install WooCommerce Address Autocomplete by DHL or use Google Places Autocomplete for WooCommerce from the WordPress plugin repository 2. Enter your Google Places API key in the plugin settings — this reduces address form completion time by ~40%
Remove unnecessary checkout fields: 1. Go to WooCommerce → Settings → Advanced → Checkout or use a field editor plugin 2. Install Checkout Field Editor for WooCommerce (ThemeHigh) to hide or reorder fields without code 3. Hide the company field, address line 2, and phone number if not required
Enable express checkout buttons: 1. Install WooCommerce Stripe plugin and enable Payment Request Buttons in its settings — this adds Apple Pay and Google Pay to the cart and checkout pages 2. Install the WooCommerce PayPal Payments plugin and enable PayPal Smart Payment Buttons — adds PayPal Express, Venmo, and Pay Later 3. Configure button placement in the plugin settings to appear above the standard checkout form
Enable cart page optimization: 1. Install WooCommerce Cart Abandonment Recovery or CartFlows to add urgency elements, save-for-later, and cross-sells to the cart page 2. Configure a free shipping threshold bar: go to WooCommerce → Settings → Shipping and set a free shipping threshold, then add a progress message to your cart template
BigCommerce
Enable Optimized One-Page Checkout: 1. Go to Settings → Checkout 2. Enable Optimized One-Page Checkout — this is BigCommerce's recommended checkout experience that consolidates all steps 3. Configure the checkout fields to show only what is necessary
Enable express checkout: 1. Go to Settings → Payment Methods → Digital Wallets 2. Enable Stripe Link, Apple Pay, Google Pay, and PayPal Express — configure each with your account credentials 3. Digital wallet buttons appear automatically at the top of the checkout flow for eligible customers
Address autocomplete: BigCommerce's optimized checkout includes Google address autocomplete by default. Verify it is enabled in Settings → Checkout → Google address autocomplete.
Install checkout enhancement apps: Go to the BigCommerce App Marketplace and search for checkout optimization. Popular options: Justuno (offers and social proof), PureClarity (personalization), and Shogun (custom page building including cart pages).
---
Custom / Headless
For headless storefronts, build the checkout with these high-impact patterns:
Express checkout buttons (highest priority): Place express checkout buttons at the top of the checkout page — above the form — so Apple Pay and Google Pay users can complete in two taps. Use Stripe's PaymentRequestButton element:
import { PaymentRequestButtonElement, useStripe } from '@stripe/react-stripe-js';
import { useState, useEffect } from 'react';
function ExpressCheckout({ cart }) {
const stripe = useStripe();
const [paymentRequest, setPaymentRequest] = useState(null);
useEffect(() => {
if (!stripe) return;
const pr = stripe.paymentRequest({
country: 'US',
currency: 'usd',
total: { label: 'Total', amount: Math.round(cart.total * 100) },
requestPayerName: true,
requestPayerEmail: true,
requestShipping: true,
});
pr.canMakePayment().then(result => {
if (result) setPaymentRequest(pr);
});
}, [stripe, cart.total]);
return paymentRequest
? <PaymentRequestButtonElement options={{ paymentRequest }} />
: null;
}Collapsible checkout sections (contact → shipping → payment): Show sections sequentially — reveal shipping after contact is complete, payment after shipping is complete. This reduces overwhelm on mobile while keeping all data visible on desktop.
Address autocomplete: Use Google Places Autocomplete to reduce address form completion time and address entry errors. Set componentRestrictions to the countries your store ships to.
Validate on blur, not on submit: Show field errors when the user moves away from a field, not only when they click submit. This lets users fix errors progressively rather than being confronted with a list of errors at the end.
Step 3: Measure the impact
After making changes, monitor these metrics in Google Analytics 4 (configure a checkout funnel under Reports → Funnel exploration):
| Metric | Target | Source |
|---|---|---|
| Checkout initiation rate | > 30% of cart sessions | Cart to checkout step 1 |
| Checkout completion rate | > 50% of initiated checkouts | Checkout to order confirmed |
| Express checkout usage | > 20% of completions | Filter by payment method |
| Mobile checkout completion | > 45% | Segment by device |
Best Practices
- Show order summary at all times — never hide the cart contents during checkout; shoppers need reassurance about what they are buying
- Put express checkout buttons above the form — Apple Pay and Google Pay users can complete purchase in two taps; do not bury them below a long form
- Show shipping costs early — revealing shipping cost at the last checkout step is the top reason for abandonment; show an estimate in the cart or at the first checkout step
- Use a single email field at the top — capturing email first enables abandonment recovery even if the customer does not complete checkout
- Trust signals near payment — SSL badge, accepted card logos, and a short return policy link near the payment fields reduce anxiety at the highest-risk step
Common Pitfalls
| Problem | Solution |
|---|---|
| Apple Pay not showing on iOS | Apple Pay requires HTTPS, a verified domain, and a registered merchant ID with Apple; on Shopify this is handled automatically when you enable it in Payment settings |
| Express checkout buttons appearing but not working | Each button requires testing in the live environment with a real device; test Apple Pay on an iOS device with a saved card, not in a browser emulator |
| Address autocomplete selecting wrong country | Restrict autocomplete to the countries your store ships to; WooCommerce plugins and Shopify both allow country restriction |
| Checkout abandonment increasing after redesign | Run an A/B test before fully committing; use Google Optimize or VWO to test the old vs. new checkout and compare completion rates |
| Mobile checkout form too long | On mobile, consolidate fields and use platform-native address autocomplete to minimize typing; consider a single-column layout |
Related Skills
- @stripe-integration
- @paypal-integration
- @guest-checkout
- @cart-logic
- @accessibility-commerce
{
"context": "Tests whether the agent structures the checkout page with collapsible contact/shipping/payment sections driven by completedSteps and activeStep state, includes a responsive sticky order summary, keeps the order summary visible at all times, persists multi-step data to sessionStorage, and ensures keyboard accessibility for expanding/collapsing sections.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Three-step STEPS array",
"max_score": 8,
"description": "The checkout steps are defined as an ordered collection (array or equivalent) containing exactly the three steps: contact, shipping, and payment — in that order"
},
{
"name": "completedSteps state",
"max_score": 8,
"description": "A completedSteps Set (or equivalent) tracks which steps the user has finished; a step is added to it when that step is submitted/completed"
},
{
"name": "activeStep state",
"max_score": 8,
"description": "An activeStep string (or equivalent) tracks which section is currently expanded; it advances automatically to the next step after completion"
},
{
"name": "isLocked prop logic",
"max_score": 10,
"description": "Sections are locked (not editable/expandable) until their prerequisite step is completed — e.g. shipping is locked until contact is done"
},
{
"name": "Order summary always visible",
"max_score": 10,
"description": "The order summary component is rendered on every step of the checkout and is NOT conditionally hidden or removed at any step"
},
{
"name": "Sticky order summary",
"max_score": 8,
"description": "The order summary panel has position: sticky (or equivalent) applied so it stays in view as the user scrolls through the form"
},
{
"name": "Responsive two-column layout",
"max_score": 10,
"description": "On viewports 768px and wider the layout uses a two-column grid with a 380px summary column; on smaller screens it is single-column"
},
{
"name": "sessionStorage step data",
"max_score": 10,
"description": "Each completed step's form data is saved to sessionStorage and restored when the user navigates back to that step"
},
{
"name": "Keyboard expand/collapse",
"max_score": 10,
"description": "Collapsible checkout sections can be expanded or collapsed using keyboard interaction (Enter or Space key) in addition to mouse click"
},
{
"name": "Progress indicator",
"max_score": 9,
"description": "A checkout progress indicator (e.g. step numbers, labels, or completed checkmarks) is displayed, reflecting the current activeStep and completedSteps"
},
{
"name": "Mobile single-column layout",
"max_score": 9,
"description": "On mobile (below 768px breakpoint) the layout collapses to a single column with the summary not sticky or stacked below/above the form"
}
]
}
Redesign Checkout Page Layout for a Home Decor Store
Problem Description
Willow & Oak is a home decor e-commerce brand doing a full storefront redesign. Their current checkout is a plain single HTML page with a long scrolling form — no structure, no sense of progress, and the cart disappears once you start filling out your details. Mobile users in particular drop off because the form feels overwhelming with no indication of how far they are through the process.
The product team wants a redesigned checkout page with a clear sense of progression through the purchase journey: contact information, then delivery details, then payment. Each section should feel contained and approachable. The design team has also requested that the basket summary remain visible throughout so customers can always see what they are buying. The page needs to work well on both desktop and mobile.
The team is particularly concerned about users who go back to change a previous step losing the data they already entered in later steps.
Output Specification
Implement the redesigned checkout page as React components. Produce the following files:
CheckoutPage.jsx— the main checkout page with step management logicCheckoutSection.jsx— a reusable collapsible section component used for each stepCheckoutProgress.jsx— a progress indicator component showing which steps are complete and which is activeOrderSummary.jsx— the order summary panel componentcheckout-layout.css— CSS for the responsive page layout
Stub out the inner form components (e.g. <ContactForm />, <ShippingForm />, <PaymentForm />) — they do not need to be fully functional, but the section management and layout must be complete.
Leave all output files in the working directory when done.
{
"context": "Tests whether the agent correctly places express checkout buttons (Apple Pay, Google Pay, PayPal Express) at the top of the checkout page above the form, includes a divider, shows them on the cart page as well, sizes them correctly, and conditionally renders Apple Pay based on device support.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Express buttons above form",
"max_score": 15,
"description": "Express checkout buttons are rendered before (above) the regular card/form section, not after it or beside it at the same level"
},
{
"name": "Divider present",
"max_score": 10,
"description": "A divider element with text 'or pay with card' (or equivalent) separates the express buttons from the regular payment form"
},
{
"name": "All three providers",
"max_score": 10,
"description": "The express checkout section includes Apple Pay, Google Pay, and PayPal Express buttons (or placeholder components for each)"
},
{
"name": "Buttons on cart page",
"max_score": 12,
"description": "Express checkout buttons are rendered on the cart page in addition to the checkout page (component used or referenced in both places)"
},
{
"name": "Minimum button height",
"max_score": 10,
"description": "Express checkout buttons have a minimum height of 44px applied via CSS or inline styles"
},
{
"name": "Dynamic Apple Pay detection",
"max_score": 15,
"description": "Apple Pay button is conditionally rendered based on a runtime availability check using ApplePaySession.canMakePayments() (or equivalent guard)"
},
{
"name": "Express section label",
"max_score": 8,
"description": "The express checkout section has a visible label such as 'Express checkout' above the buttons"
},
{
"name": "No Apple Pay without HTTPS guard",
"max_score": 10,
"description": "Code or comments acknowledge that Apple Pay requires HTTPS (either a note, a canMakePayments check, or an HTTPS requirement comment)"
},
{
"name": "Trust signals near payment",
"max_score": 10,
"description": "The regular card/form section includes trust signals near payment fields: at least one of SSL badge, accepted card logos, or a return policy reference"
}
]
}
Add Express Payment Options to Checkout
Problem Description
Luxe Apparel, a mid-sized fashion retailer, is seeing high checkout abandonment on mobile. Their analytics team found that customers who start on the cart page often abandon before reaching the payment step because entering card details on a phone feels tedious. Competitors have recently added one-tap payment options that let returning customers skip the full form entirely.
The engineering team wants to integrate Apple Pay, Google Pay, and PayPal Express into the storefront. The cart page and checkout page both need to offer these options so that users can complete their purchase at whichever point feels natural. The implementation must also handle the fact that Apple Pay is not available on all devices or browsers.
Output Specification
Implement the express checkout feature as React components. Produce the following files:
ExpressCheckout.jsx— a self-contained express checkout section componentCartPage.jsx— a cart page that includes the express checkout section alongside the regular "Proceed to checkout" buttonCheckoutPage.jsx— a checkout page that incorporates the express checkout section in its layout alongside the card payment formcheckout.css— styles for the checkout/express checkout layout
The components do not need to connect to real payment SDKs — stub out the payment button implementations (e.g. <ApplePayButton />, <GooglePayButton />, <PayPalExpressButton />). Focus on structure, placement, and conditional rendering logic.
Leave all output files in the working directory when done.
{
"context": "Tests whether the agent validates checkout form fields on blur (not on every keystroke), clears errors when the user starts correcting a field, never wipes non-payment fields on a card failure, uses IP geolocation to pre-select country, adds trust signals near the payment section, and preserves form data using beforeunload and sessionStorage.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Blur-triggered validation",
"max_score": 12,
"description": "Form field validation is triggered on the blur event, NOT on change or input events for fresh (untouched) fields"
},
{
"name": "Error clears on change",
"max_score": 12,
"description": "When a user types into a field that was already touched and already has an error, the error is cleared (i.e., error is reset to null/undefined on change when touched[field] && errors[field])"
},
{
"name": "VALIDATORS map pattern",
"max_score": 8,
"description": "Validation logic is defined as a keyed map/object (e.g. VALIDATORS = { email: ..., phone: ..., zip: ... }) rather than scattered if/else or switch statements"
},
{
"name": "Payment error preserves other fields",
"max_score": 12,
"description": "On a simulated payment/card error, only the payment section state is reset; contact and shipping field values are NOT cleared"
},
{
"name": "IP geolocation for country",
"max_score": 10,
"description": "Country (and/or currency) is pre-selected via an IP-based geolocation API call or library, not left as a blank default or hard-coded to a single country"
},
{
"name": "Trust signals near payment",
"max_score": 10,
"description": "The payment section includes at least one trust signal element: SSL/security badge, accepted card logos, or a return/refund policy reference"
},
{
"name": "beforeunload warning",
"max_score": 10,
"description": "A beforeunload (or equivalent navigation-guard) event listener is registered to warn the user before leaving a partially filled checkout form"
},
{
"name": "sessionStorage persistence",
"max_score": 10,
"description": "Form state (contact and/or shipping field values) is saved to sessionStorage so it can be restored if the user navigates away and returns"
},
{
"name": "State restoration from sessionStorage",
"max_score": 8,
"description": "On component mount the form attempts to read and restore previously saved values from sessionStorage"
},
{
"name": "touched state tracking",
"max_score": 8,
"description": "A touched state object tracks which fields the user has interacted with, used to gate when errors are shown or re-checked"
}
]
}
Build a Robust Checkout Form with Smart Validation
Problem Description
HomeNest, an online home goods retailer, recently ran a usability study on their checkout page. Participants complained that the form was aggressive — showing red errors immediately as they started typing, which felt intrusive. Others lost all their carefully entered contact and shipping details when a card payment was declined, forcing them to re-type everything. A handful of international customers were confused that the country field defaulted to the US even though they were browsing from abroad.
The engineering team wants to rebuild the checkout form with a more polished interaction model that reduces frustration and data loss. The form must collect contact information (email, phone), a shipping address (street, city, state, ZIP, country), and payment details (card number). It also needs to hold on to what the customer typed even if they accidentally navigate away mid-checkout.
Output Specification
Implement the checkout form as React components and hooks. Produce the following files:
useCheckoutForm.js— a custom hook managing form values, validation, and persistenceCheckoutForm.jsx— the full checkout form component with contact, shipping, and payment sectionsCheckoutForm.css— basic styles including how errors are displayed
The payment step does not need to connect to a real payment processor. Simulate a card-declined scenario with a button or function that triggers an error so the behavior around field preservation can be demonstrated.
Leave all output files in the working directory when done.
{
"name": "finsi/checkout-flow-optimization",
"version": "0.1.0",
"summary": "Multi-step vs single-page checkout design with conversion best practices",
"skills": {
"checkout-flow-optimization": {
"path": "SKILL.md"
}
}
}