skills/payments-checkout/cart-logic/SKILL.md
Build a robust shopping cart with add/remove/update operations, session persistence across devices, and cart merge for returning logged-in users
npx skillsauth add finsilabs/awesome-ecommerce-skills cart-logicInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Cart logic covers how your store manages items a shopper intends to buy: adding, removing, and updating items; persisting the cart across page loads and devices; and merging a guest cart into an account when the customer logs in. On Shopify, WooCommerce, and BigCommerce, the cart is built into the platform — the goal is to configure it correctly and extend it when needed. Custom code is only required for headless storefronts.
| Platform | Cart Behavior | Where to Configure |
|----------|--------------|-------------------|
| Shopify | Built-in cart with automatic persistence; uses cookies/localStorage | Theme Liquid templates + Cart API; extend with Cart Transform Shopify Function |
| WooCommerce | Built-in cart with session persistence; configures via PHP hooks | WooCommerce settings + woocommerce_add_cart_item_data and woocommerce_cart_item_price filters |
| BigCommerce | Built-in Storefront Cart API; cart persists via cookie | BigCommerce Stencil theme + Storefront Cart API |
| Custom / Headless | Must build from scratch using platform APIs or Shopify/BigCommerce Storefront API | See Custom / Headless section below |
Shopify's cart is managed automatically. To extend it:
Customize the cart drawer or page:
Enable cart persistence across devices (requires accounts):
cart_token cookie (30-day expiry by default)Merge guest cart on login:
Cart customization via Shopify Functions: Use Cart Transform Shopify Functions to modify cart items, apply custom discounts, or bundle products. Go to Settings → Custom data and deploy a Cart Transform function via the Shopify CLI.
Custom cart upsells and cross-sells: Install CartHook, ReConvert, or Frequently Bought Together from the Shopify App Store for cart upsell logic without custom code.
WooCommerce's cart is built-in and session-based.
Configure cart behavior:
Enable persistent cart for logged-in users:
Guest cart to account merge: WooCommerce automatically merges the guest cart with the customer's saved cart when they log in. To ensure this works, keep Persistent cart enabled.
Extend cart item data (e.g., for product customization options):
Use the woocommerce_add_cart_item_data filter in your theme's functions.php or a custom plugin to attach extra data to cart items (gift messages, engraving text, etc.).
Cart abandonment tracking: Install CartFlows or WooCommerce Cart Abandonment Recovery plugin to track and recover abandoned carts.
BigCommerce uses its Storefront Cart API for cart management.
Configure cart settings:
Customize the cart via Stencil theme:
Edit cart templates in your Stencil theme (templates/components/cart/) to modify the cart page layout, item display, and available actions.
Cart upsells: Use the BigCommerce Cart API to detect items in the cart and conditionally show related products or promotions in the cart template.
For a headless storefront, use your platform's Storefront API rather than building cart storage from scratch:
Shopify Storefront API (recommended for Shopify-backed headless stores):
// Create a cart
const createCart = async () => {
const response = await fetch(`https://${SHOP_DOMAIN}/api/2024-01/graphql.json`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Shopify-Storefront-Access-Token': STOREFRONT_TOKEN,
},
body: JSON.stringify({
query: `
mutation cartCreate($input: CartInput!) {
cartCreate(input: $input) {
cart { id checkoutUrl }
userErrors { field message }
}
}
`,
variables: { input: { lines: [{ merchandiseId: variantGid, quantity: 1 }] } },
}),
});
const { data } = await response.json();
return data.cartCreate.cart;
};
// Add an item to an existing cart
const addToCart = async (cartId, variantGid, quantity) => {
const response = await fetch(`https://${SHOP_DOMAIN}/api/2024-01/graphql.json`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Shopify-Storefront-Access-Token': STOREFRONT_TOKEN,
},
body: JSON.stringify({
query: `
mutation cartLinesAdd($cartId: ID!, $lines: [CartLineInput!]!) {
cartLinesAdd(cartId: $cartId, lines: $lines) {
cart { id totalQuantity cost { totalAmount { amount currencyCode } } }
}
}
`,
variables: { cartId, lines: [{ merchandiseId: variantGid, quantity }] },
}),
});
const { data } = await response.json();
return data.cartLinesAdd.cart;
};
Store the cartId in a cookie or localStorage. On login, use cartBuyerIdentityUpdate to associate the cart with the customer's account — Shopify handles the merge automatically.
BigCommerce Storefront API (for BigCommerce-backed headless stores):
Use the BigCommerce Storefront Cart API (/api/storefront/carts) which handles cart creation, item management, and customer association automatically.
Regardless of platform, these are the cart behaviors that most affect conversion:
| Problem | Solution |
|---------|----------|
| Cart disappears when user logs in (WooCommerce) | Ensure Persistent cart is enabled in WooCommerce → Settings → Accounts & Privacy |
| Guest cart is empty after browser restart | Check cookie expiry settings; Shopify uses 30-day cart tokens by default; WooCommerce session duration is configurable |
| Same item added twice instead of incrementing quantity | The platform's native cart handles this; if using headless with Storefront API, use cartLinesUpdate to increment quantity on existing lines |
| Cart shows outdated prices after a price change | Shopify and WooCommerce automatically use current prices at checkout, not add-to-cart prices; a "price changed" notice appears automatically |
| Custom add-to-cart code bypasses stock checks | Always use the platform's official add-to-cart mechanisms; custom code that writes directly to cart storage skips inventory validation |
tools
Let shoppers save products to a wishlist, share it with friends, and get notified when saved items come back in stock or drop in price
development
Build a themeable storefront with design tokens and CSS custom properties that supports white-labeling, multi-brand variants, and dark mode
development
Speed up product discovery with instant search suggestions, fuzzy typo matching, and category-aware results powered by Algolia or Elasticsearch
development
Build a mobile-first storefront with thumb-friendly navigation, sticky add-to-cart buttons, and touch-optimized components for high mobile conversion