Review suggested products before checkout
Customer App can conditionally show a review list of suggested products near a cart or checkout handoff. Suggestions can be personalized based on the customer's previous orders. Each suggestion card has a button to add the product directly to the cart with one tap, and the customer can also open the product to review its options before adding it.
:::info Suggestion actions
Selecting a suggestion card opens Product Details for a separate review, where the customer can adjust options before adding the product. An add button on the suggestion card adds the product to the cart directly, without opening Product Details.
:::
Suggestion modes are different
| Mode | Candidate source | Notes |
|---|---|---|
| Business-product mode | Reads products for the current business and retains suggestion-marked candidates | Business, order type, catalog, inventory, and cart context can change independently |
| Supplied-array mode | A caller passes a product array for local filtering and display | Caller authority, freshness, completeness, and server filtering depend on the integration |
| Cart-personalized mode | Personalized by order history: suggestions based on the customer's previous orders | Availability depends on the current cart and project configuration |
Caller and cart context must agree
A suggestion surface can receive business, cart, supplied products, current cart products, navigation callbacks, and checkout callbacks from different callers. Those inputs must all belong to the same authorized account, project, session, business, cart, order type, and revision.
Missing or inconsistent context can produce an error state, an empty list, an unfiltered fallback, a stale product, or a handoff for the wrong cart. A cart or business reference is not authorization to read customer history or infer private interests.
The visible page is review and handoff only
The full-page surface can show current cart contents, a suggested-product list, and actions that continue toward Checkout or return to browsing. Each suggestion card offers an Add action that adds the product directly to the cart, and selecting the card opens Product Details to review options first.
| Visible action | What it can start | Notes |
|---|---|---|
| Add button on a suggestion card | Adds the product to the cart directly | Current price and availability still depend on the business and order context |
| Suggestion card (outside the add button) | Product Details review | Lets the customer adjust options before adding |
| Checkout | Single-cart Checkout handoff or a caller-provided continuation | Cart readiness, payment, and order creation happen during Checkout |
| Add more products | Return to the prior browsing surface | — |
| Back/close | Navigation away from the page | — |
Filtering and fallback boundaries
The source can filter candidates marked for upselling and remove products that already appear in the current cart. Some inventoried repeats are treated differently from other repeats. The UI can also apply another current-cart filter before rendering.
That filtering does not prove current menu availability, inventory, price, options, school/student policy, schedule, serviceability, or that a supplied array was authorized and complete. If a filtered or server result is missing, do not substitute an unreviewed caller array or broader catalog as equivalent.
Loading, empty, and error states are incomplete
The visible list renders only when loading has ended, no controller error is present, and retained candidates exist. The current full-page layout does not provide a dedicated loading, empty, or error explanation for every branch; cart/checkout actions can remain visible even with no suggestions.
| Observed state | What it means |
|---|---|
| No suggestion rows | The list can still be loading, filtering, or simply has no candidates for this cart |
| Cart summary visible first | Shows the current local cart while suggestions load |
| Checkout button visible | Checkout remains available independent of whether suggestions finished loading |
| Page closes after cart becomes empty | The empty cart closes the page; suggestion loading stops |
| Error without visible message | The suggestion list did not load for this session |
Absence of a suggestion is not evidence that a customer lacks history or that a product is unavailable.
Redirect and race conditions
A caller-side redirect can open the upselling page as soon as suggestion loading ends, including with an empty supplied array. Other effects react to cart loading, cart-product changes, focus, business context, and suggestion result length. Late or reordered results can therefore navigate, filter, or close a surface against a newer cart.
Every request, redirect, Product Details handoff, Checkout handoff, and empty- cart close must be bound to one current generation. Stale or foreign results must be ignored rather than applied to the new account, project, business, or cart.
Personalization and privacy
Cart contents, customer identity, product interactions, order history, and inferred preferences are private. A safe recommendation service must derive context only from an authorized current cart/customer, minimize history and returned product data, avoid sensitive inference, and provide a clear purpose and retention boundary.
Suggestions in cart-personalized mode reflect the customer's own order history. They are not based on other customers' identities, purchases, or private data, and a customer's history is never exposed to another customer.
Unknown outcomes and safe troubleshooting
| Situation | Safe response |
|---|---|
| Suggestions differ after returning | Treat the list and cart as different revisions; do not infer why |
| Product Details shows different availability | Use Product Details only as its current review state; do not assume the suggestion was valid |
| Cart becomes empty or changes | Keep the upselling and Checkout handoffs unresolved |
| No list or error is shown | Do not refresh, reopen, or change the cart to diagnose recommendation state |
| Checkout opens unexpectedly | Treat navigation as a handoff only; do not continue to payment as a test |
| Account, project, business, or cart changed | Reject prior suggestions and callbacks |
Support reports should use only a value-free state class such as “suggestion context unresolved.” Do not include cart contents, customer/history data, product or business details, account/cart/order identifiers, recommendation reasons, links, or private screenshots.
Accessibility
- The page needs explicit loading, empty, error, review-list, Product Details, Checkout, Add more, Back, stale, and unknown state semantics.
- Suggestion cards need an accessible label that distinguishes the add button from opening Product Details, so screen readers announce the correct control.
- The horizontal list, cart summary, and footer actions need predictable focus order without relying on images, price, color, or position alone.
- At large text sizes, labels and handoff boundaries should reflow without hiding Checkout or return choices. Focus must not jump after late list or cart results.
- Screen-reader, keyboard, switch, safe-area, Back, and reduced-motion behavior can vary by device and app version.