> For the complete documentation index, see [llms.txt](https://orbit-b2b.gitbook.io/orbit-b2b-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://orbit-b2b.gitbook.io/orbit-b2b-docs/b2b-customer-portal/overview-1.md).

# My Orders & one-click reorder

> This is the **My Orders** section of the [B2B Customer Portal](/orbit-b2b-docs/b2b-customer-portal/overview.md). Orders, Quotes, Profile, and Invoices all share the same sidebar shell.

The **My Orders** section is where eligible B2B customers see their recent orders and one-click reorder selected items back into the cart. A scheduled reminder email nudges them to come back N days after fulfillment.

## What it does

* **Recent orders list** at `/apps/orbit-boost-wholesale/portal/orders` — last 20 orders with B2B badge, a `B2B only` filter toggle, and a Reorder button per row
* **Reorder preview page** at `/apps/orbit-boost-wholesale/portal/reorder?order=<id>` — preview each item from the order, adjust quantities, deselect out-of-stock or unwanted items, then `Add selected to cart`
* **Wholesale-aware pricing** — the preview shows the price the customer would pay today (based on their current group + active rules), not the historical price from the original order
* **Scheduled reminder emails** — up to 3 reminders at configurable delays after fulfillment (e.g. 30 / 60 / 90 days). Each reminder deep-links to the relevant order's preview
* **One-click unsubscribe** — every email carries an HMAC-signed unsubscribe link

## Eligibility

A customer counts as B2B-eligible if they belong to **any** of the app's Customer Groups. No tag list to configure manually — the eligibility flows from group membership.

* Logged in, member of any Customer Group → can access portal + receive reminders
* Logged in, not in any group → sees "not eligible" page
* Not logged in → sees "please log in" page
* The reminder cron only targets logged-in B2B customers with the `orb2b-b2b` order tag

## Settings location

**Apps → Orders → Reorder Settings** has four tabs:

| Tab          | What's there                                                                                                                   |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| **Texts**    | Per-locale UI strings (page titles, status labels, error banners, etc.)                                                        |
| **Design**   | Colors, border radius, custom CSS for the portal pages                                                                         |
| **Display**  | Info about the portal URL + the B2B eligibility model (read-only — eligibility is driven by Customer Groups, no field to edit) |
| **Schedule** | Reminder cron config: enable, day delays, marketing consent toggle                                                             |

## Email template

The reminder email subject + body + per-locale translations lives in **Settings → Email Templates → Reorder Reminder** — edited the same way as your registration and quote emails.

Available shortcodes:

* `{{first_name}}` — customer's first name
* `{{customer_name}}` — same as first\_name (alias for compatibility with other templates)
* `{{shop_name}}` — your store name
* `{{shop_url}}` — your storefront URL
* `{{days_ago}}` — how many days ago the order was fulfilled (the delay tier)
* `{{order_id}}` — Shopify order GID
* `{{reorder_link}}` — deep link straight to `/portal/reorder?order=<id>`
* `{{unsubscribe_link}}` — HMAC-signed link to opt out of future reminders

Sender uses your shop's SMTP config (Settings → Email Settings → SMTP) — same as transactional emails from other features.

## Order tagging

When an eligible B2B customer places an order, the `orders/create` webhook automatically tags it with **`orb2b-b2b`**. The reminder cron queries Shopify Orders by this tag so you can also filter on the Shopify Orders page (`tag:orb2b-b2b`) to see all B2B orders.

The tag write is idempotent and webhook re-deliveries are safe.

## What about the customer accounts page?

Shopify's New Customer Accounts experience (the default for new stores) runs on React UI Extensions, not Liquid theme blocks. The B2B Customer Portal lives at an app-proxy URL because of this — it works regardless of which customer accounts version your store uses.

Promote the portal URL via your storefront navigation menu, customer account dashboard custom link, or transactional email footer. Reminder emails sent by the app already deep-link straight to the relevant order's preview, so customers go right from inbox to reorder.

## Next

* [Portal overview (all four sections)](/orbit-b2b-docs/b2b-customer-portal/overview.md)
* [Enable reminders + pick a schedule](/orbit-b2b-docs/b2b-customer-portal/schedule.md)
* [Customize the email template](/orbit-b2b-docs/b2b-customer-portal/email-template.md)
* [Customize the portal design](/orbit-b2b-docs/b2b-customer-portal/design.md)
* [Test the customer flow](/orbit-b2b-docs/b2b-customer-portal/testing.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://orbit-b2b.gitbook.io/orbit-b2b-docs/b2b-customer-portal/overview-1.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
