# How Pre-Checkout Compliance Works

***

### The Compliance Flow

When a customer visits your store, CrushSuite runs a series of compliance checks throughout their shopping experience — not just at checkout. The goal is to give customers clear information early so they're never surprised by a restriction at the last step.

#### 1. Store Entry — State & Age

When a customer first visits your store, the **Entry Pop-Up Modal** appears (if enabled). It asks two questions:

* **Are you 21 or older?** — Required for legal alcohol purchases in all U.S. states
* **What state are you shipping to?** — Determines which products are available and what fees apply

Once confirmed, CrushSuite stores these preferences for the session. The customer doesn't see the modal again unless they clear their browser data.

<figure><img src="/files/qC3KnZqaud7AeribDA25" alt=""><figcaption></figcaption></figure>

#### 2. Browsing — Real-Time Product Availability

As the customer browses your store, CrushSuite dynamically controls what they see:

* **Available products** display normally with full "Add to Cart" functionality
* **Restricted products** show a compliance message (e.g., "This wine cannot be shipped to your state") or a visual indicator badge
* **Collection pages** show compliance badges on restricted product thumbnails

If the customer changes their shipping state (using the floating shipping button), product availability updates instantly — no page reload needed.

#### 3. Cart — Fee Calculation

When the customer adds wine to their cart, CrushSuite calculates:

* **State alcohol fees** based on the customer's state and the bottles in their cart (see Setting Up State Alcohol Fees)
* The fee appears as a **separate line item** in the cart

#### 4. Checkout — Final Validation

Before Shopify processes payment, CrushSuite performs a final compliance validation:

* **Address validation** — Confirms the shipping address is eligible for wine delivery (not a P.O. box in a restricted area, not in a dry county)
* **State compliance check** — Verifies the order doesn't violate any state-specific rules (quantity limits, product restrictions)
* **Age verification confirmation** — Ensures the age check was completed

If all checks pass, checkout proceeds through Shopify's native payment flow. The customer enters payment, the order is placed, and CrushSuite syncs it to Vinoshipper (or your self-managed fulfillment system).

#### 5. Post-Checkout — Order Sync

After a successful purchase:

* **Vinoshipper users:** The order syncs automatically to Vinoshipper for fulfillment
* **Self-compliance users:** The order appears in your Shopify orders dashboard for manual fulfillment

***

### What Happens When a Check Fails

CrushSuite never silently blocks a customer. When a compliance check fails, the customer sees a clear, human-readable explanation:

| Failure Type            | What the Customer Sees                                     |
| ----------------------- | ---------------------------------------------------------- |
| Underage (under 21)     | "You must be 21 or older to purchase alcohol."             |
| Restricted state        | "We're unable to ship to \[state]." or customized message  |
| Invalid address         | "We can't verify this address for wine delivery."          |
| Quantity limit exceeded | A message explaining the state's per-order or annual limit |

These messages are designed to inform — not frustrate. The customer can change their shipping state, update their address, or adjust their cart to resolve the issue.

***

### The Customer Journey — Start to Finish

Here's the full experience from a customer's perspective:

1. **Land on your store** → See the entry pop-up, confirm age, select state
2. **Browse products** → Available wines display normally, restricted ones are clearly marked
3. **Add to cart** → Alcohol fees calculated and displayed as a line item
4. **Proceed to checkout** → Address validated, compliance verified
5. **Complete payment** → Standard Shopify checkout, order confirmed
6. **Receive confirmation** → Order details and tracking information

At no point does the customer leave your Shopify store. The entire experience happens natively within your theme.

***

### Customizing the Experience

Every customer-facing element of the compliance flow is customizable through your app embed settings:

* **Entry modal** — title, subtitle, logo, description text
* **Shipping button** — color, position, visibility
* **Product page messages** — cannot-purchase text, state list display
* **Collection badges** — color, size, position

See the individual embed guides in this section for detailed customization options.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://crushsuite.gitbook.io/docs/compliance/storefront-and-checkout/how-pre-checkout-compliance-works.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
