King of Flavors docs

Cart and checkout

How the cart behaves today and what should be decided before production checkout.

Cart and checkout

The cart is designed as a quick drawer rather than a separate cart page.

Opening the cart

Shoppers can open the cart from:

  • header cart button
  • homepage review cart button
  • add-to-cart actions

Adding a product opens the cart automatically.

Cart contents

Each line item shows:

  • product image
  • product name
  • selected variant
  • quantity controls
  • item price
  • line subtotal
  • remove action

Quantity changes are saved in the browser. If the shopper refreshes, the cart should still be there.

Empty cart

The empty cart gives shoppers a way back to products instead of ending the flow.

It links to:

  • product catalog
  • shelf section

Checkout state

The storefront is pickup-first by default. At review, the shopper supplies a name, email, phone number, and optional pickup note. The API revalidates the cart against the live storefront snapshot, emails the request to the shop through Resend, and only then returns a submitted status.

“Submitted” is intentionally different from “reserved.” The shop still confirms stock, pickup timing, age requirements, and counter payment directly with the customer. If email delivery fails, the cart stays available and the shopper sees the server error instead of a false success state.

The API can also run in NMI sandbox mode for demo payment processing. In that mode, the shopper is sent to a payment handoff page where NMI tokenizes payment details before the Hono API attempts the sandbox sale.

See Payment strategy for the processor research and the production recommendation.

For production, the team should decide whether checkout means:

  • emailed pickup request with counter payment
  • NMI-backed online payment after high-risk merchant approval
  • member-only quote request
  • simple contact form for high-ticket items

For a smoke shop, pickup requests are the cleanest first production step.

That lets the store confirm:

  • age requirements
  • stock availability
  • pickup timing
  • payment method

Online payment should wait for an approved high-risk merchant account and the exact product, fulfillment, geography, and age-verification rules that account allows.

Current operational boundary

The first production version intentionally has no pickup-order tables. The accepted shop email is the operational handoff, and its reply-to address is the customer's email. An unchanged retry uses the same email-provider idempotency key, preventing duplicate shop messages during Resend's 24-hour idempotency window without requiring a persistent order store.

That makes the flow useful now, but it does not yet provide:

  • a customer receipt email
  • staff status changes or fulfillment history
  • durable customer pickup history in Locker
  • inventory reservation or automatic stock decrement

Those are the signals for introducing pickup_requests and pickup_request_items later, rather than prerequisites for launching this first request flow.

On this page