My Orders & one-click reorder
This is the My Orders section of the B2B Customer Portal. 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, aB2B onlyfilter toggle, and a Reorder button per rowReorder 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, thenAdd selected to cartWholesale-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-b2border tag
Settings location
Apps → Orders → Reorder Settings has four tabs:
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
Last updated
Was this helpful?