External storefronts

Give an LLM the Grocery storefront skill to adapt the built-in experience or create a separate client.

To create a custom Grocery storefront, copy the skill and give it to your LLM. The skill will explain how features/storefront and the customer-facing app routes implement Grocery's current experience.

After that source orientation, it will ask what you dislike, what should stay, what workflows and users matter, and what the replacement should look and feel like. It then traces the exact routes, feature slices, GraphQL calls, schema, access rules, sessions, and provider boundaries in the supplied Grocery codebase before proposing work.

Skill file: /skills/openfront-grocery-custom-storefront/SKILL.md

Current storefront routes

Routes live under app/(storefront)/ with no country or region segment. Each route file re-exports a screen from features/storefront/screens or a module from features/storefront/modules. Data loaders and server actions are in features/storefront/lib/data.

RouteCustomer journeyMain operations
/Home: departments, products on the shelf today, coupons to enter at checkout, links to listspublicGroceryStorefrontSettings, publicGroceryProducts, publicGroceryCoupons, publicGroceryAvailability, departments
/productsBrowse and search products, filter by department, availability, organic, and sortpublicGroceryProducts
/products/[slug]Product detail; add to basket, save favorite, back-in-stock and price alertspublicGroceryProduct, addItemToGroceryCart, saveFavoriteProduct, requestGroceryBackInStockAlert, requestGroceryPriceAlert
/departments, /departments/[handle]Department list and department product pagedepartments, publicGroceryProducts
/dealsSpecials: coupon terms and sale-priced productspublicGroceryCoupons, publicGroceryProducts
/fulfillmentDelivery and pickup times for the week ahead, delivery area, minimums. Viewing does not reserve a timepublicGroceryAvailability
/cartBasket: quantities, per-item substitution preference, cleargroceryCart, updateGroceryCartItem, removeItemFromGroceryCart, clearGroceryCart, updateGrocerySubstitutionPreference
/checkoutChoose delivery or pickup and a time, address and contact, coupon code, Stripe payment, place orderpublicGroceryAvailability, activeCartPaymentProviders, initiatePaymentSession, submitGroceryOrder, resumeGroceryCheckout, restartGroceryCheckout
/order/[id]Order progress, picked items, substitution decisions, approve a higher final total, curbside check-in when readyorder or guestGroceryOrder, customerOrderSubstitutions, respondToOrderLineSubstitution, authorizeOrderAdjustment, customerCheckIn, guestCustomerCheckIn
/order-accessGuests request a secure order link by order number and email; the link opens the orderrequestGuestOrderAccess, guestGroceryOrder
/account/sign-in, /account/register, /account/resetShopper sign-in, registration, password reset. The guest basket merges on sign-inregisterGroceryCustomer, mergeGuestGroceryCart
/accountAccount overview: recent orders and saved addressesauthenticatedItem, orders, addresses
/account/ordersOrder history; shop a past order againorders, reorderGroceryOrder
/account/addressesSaved delivery addressesaddresses, createAddress, updateAddress, deleteAddress
/account/profileName, contact, password, notification preferencesupdateActiveUser, updateActiveUserPassword, updateGroceryNotificationPreferences
/account/privacyDownload personal data or request erasuregroceryCustomerPrivacy, exportGroceryCustomerData, requestGroceryCustomerPrivacy
/listsShopping lists: create, delete, add items, tick off, send unchecked items to the basketshoppingLists, createCustomerShoppingList, deleteCustomerShoppingList, addToShoppingList, removeFromShoppingList, updateShoppingListItemQuantity, toggleShoppingListItemChecked, addShoppingListToCart
/favoritesSaved products (sign-in required)favoriteProducts, deleteFavoriteProduct
/subscriptionsRecurring baskets and rewards (sign-in required): create, pause, resume, skip, cancel, prepare a due basket, redeem pointssubscriptions, manageGrocerySubscription, getGroceryLoyalty, redeemGroceryLoyalty
/supportHelp topics and a contact form that lands in the staff inboxsubmitGroceryContactMessage
/policiesHow estimates, picking, authorization and final payment, delivery and pickup, and problems with orders workpublicGroceryStorefrontSettings
/staff/acceptStaff accept an invitation linkacceptGroceryStaffInvitation

Journey boundaries

  • Carts and guest orders use HttpOnly cookies set by server actions. The storefront middleware does no region routing.
  • Prices in the basket are estimates. Weighed items are charged on the picked weight. Payment is authorized at checkout and captured after staff finalize the picked goods. If the final total is higher than the authorization, the customer must approve again on the order page.
  • Coupons are entered as a code at checkout and checked against the basket. There is no clip-a-coupon command and no recipe page.
  • Checkout needs a delivery or pickup time. Delivery also needs a postal code inside the store's delivery prefixes and the delivery minimum.
  • Checkout takes payment through the Stripe adapter once STRIPE_ENABLED=true and the three Stripe keys are set.
  • Public reads are scoped to PUBLIC_STORE_ID. Only published products and active departments are returned. Store details still set to the onboarding placeholders are not shown to shoppers.

On this page