@aglyn/aglyn 1.0.0-beta.232 → 1.0.0-beta.233

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/package.json +11 -11
  2. package/src/lib/app-utils/admin-audit-index.d.ts +3 -1
  3. package/src/lib/app-utils/admin-audit-index.js +9 -1
  4. package/src/lib/app-utils/admin-audit-index.js.map +1 -1
  5. package/src/lib/app-utils/analytics-summary.d.ts +95 -0
  6. package/src/lib/app-utils/analytics-summary.js +113 -0
  7. package/src/lib/app-utils/analytics-summary.js.map +1 -0
  8. package/src/lib/app-utils/artifact-list-keys.js +12 -0
  9. package/src/lib/app-utils/artifact-list-keys.js.map +1 -1
  10. package/src/lib/app-utils/artifact-list-queries.d.ts +16 -0
  11. package/src/lib/app-utils/artifact-list-queries.js +122 -4
  12. package/src/lib/app-utils/artifact-list-queries.js.map +1 -1
  13. package/src/lib/app-utils/crm.d.ts +30 -2
  14. package/src/lib/app-utils/crm.js +77 -15
  15. package/src/lib/app-utils/crm.js.map +1 -1
  16. package/src/lib/app-utils/docs-help.generated.d.ts +17 -5
  17. package/src/lib/app-utils/docs-help.generated.js +35 -1
  18. package/src/lib/app-utils/docs-help.generated.js.map +1 -1
  19. package/src/lib/app-utils/docs-index.generated.js +139 -6
  20. package/src/lib/app-utils/docs-index.generated.js.map +1 -1
  21. package/src/lib/app-utils/lockdown.js +1 -1
  22. package/src/lib/app-utils/lockdown.js.map +1 -1
  23. package/src/lib/app-utils/message-search.js +5 -2
  24. package/src/lib/app-utils/message-search.js.map +1 -1
  25. package/src/lib/app-utils/name-search.js +15 -3
  26. package/src/lib/app-utils/name-search.js.map +1 -1
  27. package/src/lib/app-utils/screen-analytics-aggregate.d.ts +70 -0
  28. package/src/lib/app-utils/screen-analytics-aggregate.js +82 -0
  29. package/src/lib/app-utils/screen-analytics-aggregate.js.map +1 -0
  30. package/src/lib/app-utils/screen-kind.d.ts +25 -0
  31. package/src/lib/app-utils/screen-kind.js +25 -0
  32. package/src/lib/app-utils/screen-kind.js.map +1 -0
  33. package/src/lib/app-utils/screen-route.d.ts +1 -5
  34. package/src/lib/app-utils/screen-route.js +2 -4
  35. package/src/lib/app-utils/screen-route.js.map +1 -1
  36. package/src/lib/app-utils/site-journey-steps.d.ts +38 -0
  37. package/src/lib/app-utils/site-journey-steps.js +54 -0
  38. package/src/lib/app-utils/site-journey-steps.js.map +1 -0
  39. package/src/lib/app-utils/site-journey.d.ts +2 -22
  40. package/src/lib/app-utils/site-journey.js +2 -32
  41. package/src/lib/app-utils/site-journey.js.map +1 -1
  42. package/src/lib/plugin-manager/first-party-plugins.generated.js +20 -2
  43. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
  44. package/src/lib/plugin-manager/plugin-checkout-credits.d.ts +288 -0
  45. package/src/lib/plugin-manager/plugin-checkout-credits.js +196 -0
  46. package/src/lib/plugin-manager/plugin-checkout-credits.js.map +1 -0
  47. package/src/lib/plugin-manager/plugin-shipping-rates.d.ts +10 -0
  48. package/src/lib/plugin-manager/plugin-shipping-rates.js.map +1 -1
@@ -3523,7 +3523,7 @@ export const DOCS_SECTION_INDEX = [
3523
3523
  title: 'Order emails & status page',
3524
3524
  heading: 'What your customers get',
3525
3525
  anchor: '#customer-emails',
3526
- text: '| When | Email | What it says |\n| -- | -- | -- |\n| An order is paid | Order receipt | The items, the total, any license keys and download links, and your receipt footer. Sent for checkout and Buy buttons, for payment links you send from a draft order, and for register sales when the customer gives an email. |\n| You ship part or all of an order | Order shipped | The items in that package, the carrier and tracking number with a tracking link, and how many items are still to ship. One email per package. |\n| You mark an order delivered | Order delivered | The order and its items. |\n| You refund an order | Order refunded | The amount, the items you refunded by name (if you picked any), and whether the order is now refunded in full. One email per refund. |\n| You cancel an order | Order canceled | The order and its items. Canceling doesn\'t refund a payment: refund first if the customer paid. |\nA dropship supplier who posts tracking for their part of an order sends the customer the same Order shipped email.\nEach email is sent once. If a payment confirmation arrives twice, or you click a button twice, the customer still gets one email. A second package or a second partial refund is a new email.\nRegister sales and orders with only digital or service items don\'t send a shipping or delivery email unless you add a tracking number.\nTracking links\nTracking links are built from the carrier you type when you fulfill: USPS, UPS, FedEx, DHL, Canada Post, Royal Mail and Australia Post are recognized, including spellings like "UPS Ground" or "Fed Ex". For any other carrier the email shows the carrier and tracking number without a link.\nTurning emails off\nAll five emails are on for every store. To turn one off, open Commerce → Settings → Customer notifications and switch it off. Switching th'
3526
+ text: '| When | Email | What it says |\n| -- | -- | -- |\n| An order is paid | Order receipt | The items, the total, any license keys and download links, and your receipt footer. Sent for checkout and Buy buttons, for payment links you send from a draft order, and for register sales when the customer gives an email. |\n| You ship part or all of an order | Order shipped | The items in that package, the carrier and tracking number with a tracking link, and how many items are still to ship. One email per package. |\n| You mark an order delivered | Order delivered | The order and its items. |\n| You refund an order | Order refunded | The amount, the items you refunded by name (if you picked any), and whether the order is now refunded in full. One email per refund. |\n| You cancel an order | Order canceled | The order and its items. Canceling doesn\'t refund a payment: refund first if the customer paid. |\n| You mark a pickup order ready | Order ready for pickup | The location and its address, your pickup hours and arrival instructions. See Pickup & local delivery. |\n| A pickup order is collected | Order picked up | A short confirmation, with the items. |\n| Your driver takes a local delivery out | Order out for delivery | The items and the delivery time the customer booked. When you mark it delivered, they get Order delivered. |\nA dropship supplier who posts tracking for their part of an order sends the customer the same Order shipped email.\nEach email is sent once. If a payment confirmation arrives twice, or you click a button twice, the customer still gets one email. A second package or a second partial refund is a new email.\nRegister sales and orders with only digital or service items don\'t send a shipping or delivery email unless you add a tracking number.\nTracking links\nTracking links'
3527
3527
  },
3528
3528
  {
3529
3529
  path: '/commerce-and-bookings/commerce/order-notifications',
@@ -3651,6 +3651,13 @@ export const DOCS_SECTION_INDEX = [
3651
3651
  anchor: '#shipping--taxes',
3652
3652
  text: '- Shipping zones own countries (\'\' = rest of world); rates are flat, free-over-subtotal, or subtotal/weight tiers; optional local pickup. See Shipping.\n- Taxes: manual per-region rates (state beats country, VAT-style inclusive pricing supported) or Stripe Tax automatic calculation; products can be tax-exempt.\nLodging tax on reservations\nA stay is not goods. The sales-tax settings above configure a goods rate resolved against an address; occupancy (lodging/hotel) tax is a separate regime with its own rates, its own registration and its own return, so reservations do not use them.\nCommerce → Settings → Taxes → Lodging tax is where you set your own rate for it. It is off by default — leave it blank and reservations charge no lodging tax, exactly as before.\nWhen you set a rate, Aglyn adds it to the reservation charge as its own receipt line using the label you choose, and records the amount and the rate on the reservation. It is always your own rate: Stripe Tax cannot compute occupancy tax from a reservation session, so a store using Stripe Tax for goods still sets this one by hand.\nAglyn does not provide tax advice Aglyn applies the rate you enter and records what was charged. It does not determine whether lodging tax applies to you, at what rate, or where it should be paid. Confirm your obligations with a qualified tax professional.\nDeposits. A reservation usually charges a deposit rather than the whole stay, and the rate is applied to the amount actually charged — the deposit. Aglyn does not decide whether your jurisdiction wants occupancy tax on the full stay at booking, on the deposit, or at check-out. If tax is due on more than the deposit, collect the difference the way you collect the rest of the balance.\nStorefront sales tax\nAnalytics → Storefront sales tax shows w'
3653
3653
  },
3654
+ {
3655
+ path: '/commerce-and-bookings/commerce/overview',
3656
+ title: 'Commerce',
3657
+ heading: 'Pickup and local delivery',
3658
+ anchor: '#pickup-and-local-delivery',
3659
+ text: 'Buyers can choose to pick up an order at one of your locations, or have your own driver deliver it, instead of shipping. Pickup is turned on per location, with its hours and arrival instructions; local delivery has zones by postal code, each with a fee, a minimum order and a free-over amount, and the delivery times buyers book at the cart. The Pickup & delivery card on the Orders page lists what to prepare, what is waiting to be collected and what is out for delivery, and the buyer is emailed at each step. See Pickup & local delivery.'
3660
+ },
3654
3661
  {
3655
3662
  path: '/commerce-and-bookings/commerce/overview',
3656
3663
  title: 'Commerce',
@@ -3665,6 +3672,41 @@ export const DOCS_SECTION_INDEX = [
3665
3672
  anchor: '#related',
3666
3673
  text: '- Product catalog\n- Use ShipStation with Aglyn\n- Use ShippingEasy with Aglyn\n- Use Pirate Ship with Aglyn\n- Billing & plans\n- Bookings & scheduling'
3667
3674
  },
3675
+ {
3676
+ path: '/commerce-and-bookings/commerce/pickup-and-local-delivery',
3677
+ title: 'Pickup & local delivery',
3678
+ heading: '',
3679
+ anchor: '',
3680
+ text: 'Pickup & local delivery\nBesides shipping, your storefront cart and a product\'s Buy now button can offer two more ways to get an order:\n- Pick up in store — the buyer chooses one of your locations, and you email them when the order is ready to collect.\n- Local delivery — your own driver brings the order. The buyer enters their postal code, sees your delivery fee, and books a delivery time.\nBoth are part of every plan that includes Commerce. A store that sets up neither keeps its cart exactly as it was.\nLocal delivery is your own delivery. Orders that a marketplace courier collects are covered by Delivery apps, which work separately.'
3681
+ },
3682
+ {
3683
+ path: '/commerce-and-bookings/commerce/pickup-and-local-delivery',
3684
+ title: 'Pickup & local delivery',
3685
+ heading: 'Set up pickup',
3686
+ anchor: '#set-up-pickup',
3687
+ text: 'Pickup is set per location under Products → Settings → Inventory locations. On a location\'s row, choose Pickup, then:\n1. Turn on Buyers can pick up orders here.\n2. Enter the Pickup hours, one line per set of days, like Mo-Fr 09:00-17:00 and Sa 10:00-14:00. A line that doesn\'t read as days and times is flagged before you save.\n3. Add Arrival instructions if buyers need them, such as which door to use.\n4. Choose how long an order is Usually ready in, or leave it unsaid.\nGive the location an address too (Add address on its row), so buyers know where to go. Every location with pickup on is offered at the cart, with your default location first.\nWhen a buyer picks up at a location, that location\'s stock is reserved while they check out and sold from that location when they pay. If the location doesn\'t have enough, the cart says so and the buyer can choose another location or have it shipped. Canceling the order puts the stock back at the same location.\nThe Offer free local pickup switch on the Shipping card is the older, unnamed pickup choice. Once any location offers pickup, the cart uses your locations instead.'
3688
+ },
3689
+ {
3690
+ path: '/commerce-and-bookings/commerce/pickup-and-local-delivery',
3691
+ title: 'Pickup & local delivery',
3692
+ heading: 'Set up local delivery',
3693
+ anchor: '#set-up-local-delivery',
3694
+ text: 'Local delivery is set up on the Local delivery card under Products → Settings:\n1. Turn on Deliver orders yourself and enter the two-letter Country you deliver in.\n2. Optionally choose the location orders Leave from. Its stock is reserved and sold for delivery orders.\n3. Add one or more Zones. A zone lists the postal codes it covers: exact codes such as 10001, a prefix ending in such as 100, or a range such as 10010-10020. Each zone has its own Fee, an optional Minimum order and an optional Free over amount. When a postal code is in more than one zone, the zone listed first is used.\n4. Enter your Delivery windows, one per line, like Mo-Fr 09:00-12:00. Each line is offered on each of its days.\n5. Choose how long before a window an order must be placed (Order at least) and how many days ahead buyers can book.\n6. Optionally add What buyers should know, such as "We text when we\'re 10 minutes away." It shows at the cart and on the receipt.\nThe card lists anything that stops checkout from offering delivery, such as a zone with no postal codes or no delivery windows.\nAt the cart, the buyer enters their postal code and sees the fee, or why delivery isn\'t available, such as an order below the zone\'s minimum. Checkout charges the fee as the order\'s shipping and asks for an address in your country only. If the address the buyer then enters is outside all of your zones, the order is flagged and you\'re notified, so you can contact the buyer or refund the delivery.'
3695
+ },
3696
+ {
3697
+ path: '/commerce-and-bookings/commerce/pickup-and-local-delivery',
3698
+ title: 'Pickup & local delivery',
3699
+ heading: 'The pickup & delivery queue',
3700
+ anchor: '#queue',
3701
+ text: 'The Pickup & delivery card on the Orders page lists what needs doing, soonest first:\n| Tab | What\'s in it |\n| -- | -- |\n| To prepare | Pickup orders you haven\'t marked ready. |\n| Ready for pickup | Pickup orders waiting to be collected. |\n| To deliver | Local deliveries, by delivery time. |\n| Out for delivery | Deliveries your driver has taken out. |\n| Delivery failed | Deliveries that couldn\'t be completed, to send out again. |\nPick a location at the top of the card to see only that location\'s orders. Each row has its next step as a button, and Open shows the whole order. The same steps are in the order\'s dialog.\n| Step | What happens |\n| -- | -- |\n| Mark ready | The buyer gets the Order ready for pickup email with the location, your pickup hours and instructions. Not ready yet takes it back. |\n| Picked up | The order is fulfilled and delivered, and the buyer gets a short confirmation. |\n| Out for delivery | The buyer gets the Order out for delivery email with their delivery time. |\n| Delivered | The order is fulfilled and delivered, and the buyer gets the Order delivered email. |\n| Couldn\'t deliver | The delivery moves to Delivery failed, with an optional note. Send it out again when you\'re ready. |\nEach email is sent once per step, and each can be turned off on the Customer notifications card. When text messages are available, buyers can add a mobile number at the cart to get these updates by text as well. Picked up and delivered orders count as fulfilled for your reports, outbound webhooks and accounting, exactly like shipped ones.\nThe buyer\'s order status page shows where to pick up, the pickup hours, or the delivery time, and each step as it happens.'
3702
+ },
3703
+ {
3704
+ path: '/commerce-and-bookings/commerce/pickup-and-local-delivery',
3705
+ title: 'Pickup & local delivery',
3706
+ heading: 'Related',
3707
+ anchor: '#related',
3708
+ text: '- Shipping\n- Order emails & status page\n- Orders & returns\n- Delivery apps'
3709
+ },
3668
3710
  {
3669
3711
  path: '/commerce-and-bookings/commerce/pos-and-reservations',
3670
3712
  title: 'POS & reservations',
@@ -3721,6 +3763,13 @@ export const DOCS_SECTION_INDEX = [
3721
3763
  anchor: '#customer-display',
3722
3764
  text: 'A customer display is a tablet facing your customer. It shows your store\'s logo (or name) and a welcome line between sales, the basket with its total as you ring it up, and it lets the customer choose a tip and a receipt themselves.\nTo pair one:\n1. On the register, tap Pair display next to the Register heading. It shows an address and a 6-digit code. The code works once and expires in 10 minutes.\n2. On the tablet, open that address — your console address followed by /kiosk/commerce/pos-display — and enter the code. No one signs in on the tablet.\nOnce paired, the register\'s button reads Display connected. During a sale the display shows:\n- The basket — each line, the subtotal, any discount, the total and what has been paid so far. Once a tip is added it is shown on its own line, with the Total with tip under it. Amounts are in your store\'s currency.\n- Tip choices — when tips are on and the cashier taps Ask on display: a button per percentage, an amount the customer types, or no tip.\n- "Tap, insert or swipe your card on the reader." while a card reader payment waits.\n- Receipt choice — when Receipts at the register is Ask the customer: email, text (shown only when text messages are available for your store), print or no receipt. When the customer asks for an email receipt and Offer email sign-up on the customer display is on (it is by default), an unticked Email me news and offers box is shown under the address. Only a ticked box adds them to your marketing audience.\nAfter the customer answers, the display thanks them and says the cashier will finish up. When the sale is paid and the receipt is handled, it shows Thank you! for a few seconds and then returns to the welcome screen. The email address or phone number the customer typed is not kept on the display: it is cleare'
3723
3765
  },
3766
+ {
3767
+ path: '/commerce-and-bookings/commerce/pos-and-reservations',
3768
+ title: 'POS & reservations',
3769
+ heading: 'Self-service kiosk',
3770
+ anchor: '#self-service-kiosk',
3771
+ text: 'A self-service kiosk is a tablet your customers order from themselves. They browse your products by category, choose sizes and modifiers, review the total with tax, and pay — or send the order to the counter. It belongs to one register, and its orders are register sales: the same prices, tax, automatic promotions and stock as a sale you ring up.\nTo pair one:\n1. On the register, tap Pair display, then choose Self-service kiosk. It shows an address and a 6-digit code that works once and expires in 10 minutes.\n2. On the tablet, open that address — your console address followed by /kiosk/commerce/pos-kiosk — and enter the code. No one signs in on the tablet. A customer display code does not pair a kiosk, and a kiosk code does not pair a display.\nThe kiosk keeps working for as long as the person who paired it can use the register. If they are removed from the site or lose access to the register, or the plan no longer includes POS, the kiosk stops taking orders until someone pairs it again.\nA customer\'s order goes like this:\n1. Start order, then tap products to add them. A product with sizes, options or modifiers opens its choices first. Sold-out items cannot be added.\n2. Checkout shows each line with the subtotal, any discount, the tax and the total. Prices and tax always come from your store, never from the tablet.\n3. The customer pays:\n- Pay with card sends the total to the register\'s card reader. It is shown only when card readers are available for your store and one is assigned to the kiosk\'s register. When Ask for tips at the register is on, the kiosk asks for the tip first, so the reader does not ask again.\n- Pay at counter sends the order to the register (see below). It is on by default; turn it off with Kiosk: let customers pay at the counter.\n4. After a card payment'
3772
+ },
3724
3773
  {
3725
3774
  path: '/commerce-and-bookings/commerce/pos-and-reservations',
3726
3775
  title: 'POS & reservations',
@@ -3840,6 +3889,13 @@ export const DOCS_SECTION_INDEX = [
3840
3889
  anchor: '#printed-receipts',
3841
3890
  text: 'Receipts print on any 80 mm receipt printer through your browser\'s print dialog. Each receipt has your logo and store name, the order number and its barcode, the date, cashier and register, the customer\'s name, every item, discounts, tax, the total, how it was paid (card with its last four digits), the tip and change, and your receipt footer from Commerce → Settings. Two more lines are set in Admin → Plugins → Commerce: Address on printed receipts, printed under your store name, and Return policy on printed receipts, printed at the foot.\n- After each sale, the register shows Print receipt and Gift receipt for that sale until the next one completes.\n- Gift receipt prints the items and the barcode without any prices.\n- Reprint any register sale from its order on the Orders page: open the order and use Print receipt or Gift receipt.\nMost network receipt printers open the cash drawer cabled to them whenever they print, so printing a cash sale\'s receipt also opens the drawer. That is a setting on the printer.'
3842
3891
  },
3892
+ {
3893
+ path: '/commerce-and-bookings/commerce/pos-operations',
3894
+ title: 'Running the register',
3895
+ heading: 'Selling while offline',
3896
+ anchor: '#selling-while-offline',
3897
+ text: 'When the register loses its connection it keeps selling cash. A banner across the top of the register says it is offline and how many sales are waiting on the device.\n- What still works: the product grid, search and barcode scans (from the catalog the register saved while it was online), the basket, the cashier\'s discount up to your register limit, your store\'s own tax rate, and cash. The receipt prints through the browser\'s print dialog, and its barcode is the one the order answers to once it syncs.\n- What is off until the connection returns: card readers, Tap to Pay, typed cards, the QR card link, gift cards, store credit and rewards, room charges, discount codes and store promotions. Card payments need the connection, a gift card or store credit balance can only be checked online, so neither is redeemed offline, and codes and promotions are counted against their limits online.\n- When the connection returns, the register sends its saved sales on its own. Each one becomes a paid order, dated when it was rung, in the shift it was rung in and under the cashier who rang it. The emailed receipt goes to the customer then. Cloud receipt printers print nothing for a synced sale, and its drawer does not open again.\n- A sale is never lost and never counted twice. It stays on the device until your store has recorded it, and sending it again (a connection that comes and goes) records it once.\nWhat the sync checks\nThe customer has already paid, so the sync records the sale as it was rung and says what you should look at, on the order and in the register:\n- Stock that went short: more was sold than the shelf held, for example because the website sold the last one meanwhile. The order lists the item and how many were short.\n- A price that changed after the register saved the catalog'
3898
+ },
3843
3899
  {
3844
3900
  path: '/commerce-and-bookings/commerce/pos-operations',
3845
3901
  title: 'Running the register',
@@ -3847,6 +3903,83 @@ export const DOCS_SECTION_INDEX = [
3847
3903
  anchor: '#related',
3848
3904
  text: '- POS & reservations\n- Commerce overview'
3849
3905
  },
3906
+ {
3907
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3908
+ title: 'Rewards, referrals and store credit',
3909
+ heading: '',
3910
+ anchor: '',
3911
+ text: 'Rewards, referrals and store credit\nRewards is your store\'s own loyalty program. Customers earn points on every order — online and at the register — and spend them like store credit. Members can share a referral code that takes money off a friend\'s first order and earns the member store credit. You can also give any customer store credit by hand, beside your gift cards.\nRewards comes with every plan that includes selling, at no extra cost. It is off until you turn it on, so nothing changes for your customers until you do.'
3912
+ },
3913
+ {
3914
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3915
+ title: 'Rewards, referrals and store credit',
3916
+ heading: 'Set up your program',
3917
+ anchor: '#set-up-your-program',
3918
+ text: '1. Go to Products → Promotions and find the Rewards card.\n2. Turn on Customers earn and spend rewards.\n3. Set the rates:\n- Points per dollar spent — how many points each whole dollar of goods earns.\n- Points for $1 off — what points are worth when a customer spends them. With the defaults, 5 points per dollar and 100 points for $1 off, a customer gets back 5% of what they spend. The card shows the rate as you change it.\n- Points needed to redeem — a customer spends points once they hold at least this many.\n- Welcome points — given with a customer\'s first order. Leave it at 0 for none.\n4. Select Save in the card\'s header.\nThe card also shows how many members you have, the points they hold and what those points are worth, and the store credit they hold. Points and store credit are money your store owes, so keep an eye on these figures.\nOnly a site admin can change the program; anyone on the site can read it.'
3919
+ },
3920
+ {
3921
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3922
+ title: 'Rewards, referrals and store credit',
3923
+ heading: 'How customers earn',
3924
+ anchor: '#how-customers-earn',
3925
+ text: 'A customer joins the first time they place an order with an email address while rewards are on. Each order earns points on the goods they paid for: the items, less any discount and less any rewards they spent. Shipping, tax and tips never earn points, and points spent on an order never earn more points.\nPoints are added once per order, shortly after it is paid, whether the order came from your online store or your register. A register sale earns points when you attach a customer with an email address to it.'
3926
+ },
3927
+ {
3928
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3929
+ title: 'Rewards, referrals and store credit',
3930
+ heading: 'Spending rewards online',
3931
+ anchor: '#spending-rewards-online',
3932
+ text: 'Every member has a rewards code, such as RW-7K3P-Q9XZ-2M4D, sent in each rewards email. When rewards are on, your cart shows a Rewards code field. A customer enters their code and checkout takes their store credit first, then their points, up to what is left to pay on the goods after other discounts and gift cards.\nThe balance is held while the customer pays, so the same points cannot be spent twice at once. If they leave without paying, the hold is let go.\nA rewards code is like a gift card code: anyone who has it can spend the balance. Customers should keep it private.'
3933
+ },
3934
+ {
3935
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3936
+ title: 'Rewards, referrals and store credit',
3937
+ heading: 'At the register',
3938
+ anchor: '#at-the-register',
3939
+ text: 'When rewards are on, the register\'s tender buttons include Rewards. Select it, then either:\n- type the customer\'s email (or the start of it) or their rewards code and select Find, then pick their account to take what it can pay; or\n- type a code the customer reads out and select Apply code.\nRewards can pay part of a sale and another tender the rest. Void sale gives back any rewards it took.'
3940
+ },
3941
+ {
3942
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3943
+ title: 'Rewards, referrals and store credit',
3944
+ heading: 'Referrals',
3945
+ anchor: '#referrals',
3946
+ text: 'Turn on Members can refer friends in the Rewards card, then set:\n- Friend\'s first-order credit — taken off a friend\'s first order when they use a member\'s referral code.\n- Friend\'s minimum order — the smallest order the credit applies to. 0 for any.\n- Member\'s reward — store credit the member earns once the friend\'s order is paid.\nEach member has a referral code, such as RF-7K3P9X, shown in their rewards emails. A friend enters it in the Rewards code field in the cart, with their own email. The credit is for a friend\'s first order only: it is refused for an email that has already ordered or already used a referral, and a member cannot use their own code. At the register, attach the friend\'s email to the sale before applying the code.'
3947
+ },
3948
+ {
3949
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3950
+ title: 'Rewards, referrals and store credit',
3951
+ heading: 'Members and store credit',
3952
+ anchor: '#members-and-store-credit',
3953
+ text: 'The Rewards members card under Products → Promotions lists every member, newest first. Sort by most points, or type the start of an email to find someone. Select a member to see their points, store credit, rewards and referral codes, and their last fifty changes.\n- Adjust adds or takes away points or store credit for a member, with a note kept in their history.\n- Give store credit in the card\'s header does the same for any email, and makes them a member if they are not one yet. Turn on Email the customer when credit is added to send them their new balance and rewards code.\nAdjusting balances needs an editor or admin on the site.'
3954
+ },
3955
+ {
3956
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3957
+ title: 'Rewards, referrals and store credit',
3958
+ heading: 'On an order',
3959
+ anchor: '#on-an-order',
3960
+ text: 'An order\'s dialog shows a Rewards section when rewards touched it: the points it earned and for whom, the rewards it spent, and anything a refund changed.'
3961
+ },
3962
+ {
3963
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3964
+ title: 'Rewards, referrals and store credit',
3965
+ heading: 'Refunds and cancellations',
3966
+ anchor: '#refunds-and-cancellations',
3967
+ text: '- Points earned come back off the member in proportion to the money refunded, and all of them when an order is fully refunded or canceled. A member who already spent those points can end up with a negative balance, which new orders fill back in.\n- Rewards spent online are given back in the same proportion.\n- Rewards spent at the register go back to the member when you refund that payment in a register return, and when you void the sale.\n- A friend\'s referral credit is a discount, so nothing is given back for it.'
3968
+ },
3969
+ {
3970
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3971
+ title: 'Rewards, referrals and store credit',
3972
+ heading: 'Emails',
3973
+ anchor: '#emails',
3974
+ text: 'Rewards sends members three emails, on by default:\n- Rewards points earned — the points an order earned, their balance and their codes.\n- Store credit given — when you give them store credit.\n- Referral reward — when a friend\'s first order earns them store credit.\nDesign them like your other store emails, in your site\'s theme. To stop all three, turn off Email members what they earn and are given in the Rewards card.'
3975
+ },
3976
+ {
3977
+ path: '/commerce-and-bookings/commerce/rewards-and-referrals',
3978
+ title: 'Rewards, referrals and store credit',
3979
+ heading: 'Switching it off for a site',
3980
+ anchor: '#switching-it-off-for-a-site',
3981
+ text: 'Turn off Customers earn and spend rewards to stop new points and hide the rewards field and tender. Members keep their points and store credit, and refunds still take back points from orders placed while it was on.'
3982
+ },
3850
3983
  {
3851
3984
  path: '/commerce-and-bookings/commerce/sales-channels',
3852
3985
  title: 'Sales channels',
@@ -3915,7 +4048,7 @@ export const DOCS_SECTION_INDEX = [
3915
4048
  title: 'Shipping',
3916
4049
  heading: 'Zones and rates',
3917
4050
  anchor: '#zones-and-rates',
3918
- text: 'A zone owns countries; is the rest of the world. A rate belongs to one zone and prices a parcel in one of four ways:\n| Rate type | What the shopper pays |\n| -- | -- |\n| Flat | One price. |\n| Free over subtotal | One price, or nothing once the cart reaches the subtotal you set. |\n| Subtotal tiers | The price of the first tier the cart\'s subtotal fits under. |\n| Weight tiers | The price of the first tier the cart\'s weight fits under. Weight is each variant\'s weight times its quantity. |\nLocal pickup adds a free collection choice beside your rates. It does not widen where you ship: a destination no rate reaches is still refused.\nCheckout charges only the rates of the zone the destination falls in, and narrows the address it collects to that destination, so a shopper cannot pick another zone\'s cheaper rate. The destination coverage rules explain what your zones make checkout ask and refuse.'
4051
+ text: 'A zone owns countries; is the rest of the world. A rate belongs to one zone and prices a parcel in one of four ways:\n| Rate type | What the shopper pays |\n| -- | -- |\n| Flat | One price. |\n| Free over subtotal | One price, or nothing once the cart reaches the subtotal you set. |\n| Subtotal tiers | The price of the first tier the cart\'s subtotal fits under. |\n| Weight tiers | The price of the first tier the cart\'s weight fits under. Weight is each variant\'s weight times its quantity. |\nLocal pickup adds a free collection choice beside your rates. It does not widen where you ship: a destination no rate reaches is still refused. To let buyers choose which location to collect from, with pickup hours and a ready-for-pickup email, turn on pickup for the location instead: see Pickup & local delivery.\nCheckout charges only the rates of the zone the destination falls in, and narrows the address it collects to that destination, so a shopper cannot pick another zone\'s cheaper rate. The destination coverage rules explain what your zones make checkout ask and refuse.'
3919
4052
  },
3920
4053
  {
3921
4054
  path: '/commerce-and-bookings/commerce/shipping',
@@ -4510,7 +4643,7 @@ export const DOCS_SECTION_INDEX = [
4510
4643
  title: 'Companies',
4511
4644
  heading: 'The companies list',
4512
4645
  anchor: '#the-companies-list',
4513
- text: 'The list shows every company your site may see, most recently changed first, with its domain, how many contacts are linked to it, its owner, when it was last changed and its next activity — when the earliest open task against it is due. The table\'s Search box finds a company by a word of its name or its domain. Filters › Company finds one whose name equals what you type, or starts with it — which orders the list by name — Filters › Owner shows one teammate\'s accounts, or any of several, Filters › Type, Industry and Rating show the companies holding one value of that list, or any of several, and Next activity › is empty keeps only the companies with nothing scheduled.\nType, Industry, Rating, Account source, Employees and Annual revenue are optional columns: turn one on from a column\'s menu (⋮ › Manage columns), and a saved view that shows it keeps it.\nEvery filter and the search are answered by the list\'s query, so they reach every company, a page at a time, not only the page on screen, and filters on different columns add up. The search matches whole words from their start — "cof" finds Coffee, a fragment from the middle of a word does not — one word at a time: type several and it searches the first, and says so. Under a site, a member whose access is limited to particular sites searches by the start of a company\'s name, and a notice says so. When a combination cannot be answered by one query, the list does not apply that filter, and a notice above the table names it and says why; see Filter and search a list. The Company column\'s header sorts only the rows of the page on screen; the pages keep the list\'s own order. Clicking a row opens the company\'s page.\nThe Contacts column is a count kept on the company and moved with every link and unlink, so a page of companies cos'
4646
+ text: 'The list shows every company your site may see, most recently changed first, with its domain, how many contacts are linked to it, its owner, when it was last changed and its next activity — when the earliest open task against it is due. The table\'s Search box finds a company by a word of its name or its domain. Filters › Company finds one whose name equals what you type, or starts with it — which orders the list by name — Filters › Owner shows one teammate\'s accounts, or any of several, Filters › Type, Industry and Rating show the companies holding one value of that list, or any of several, and Next activity › is empty keeps only the companies with nothing scheduled.\nType, Industry, Rating, Account source, Employees and Annual revenue are optional columns: turn one on from a column\'s menu (⋮ › Manage columns), and a saved view that shows it keeps it.\nEvery filter and the search are answered by the list\'s query, so they reach every company, a page at a time, not only the page on screen, and filters on different columns add up. The search matches whole words from their start — "cof" finds Coffee, a fragment from the middle of a word does not — one word at a time: type several and it searches the first, and says so. Under a site, a member whose access is limited to particular sites searches by the start of a company\'s name, and a notice says so. When a combination cannot be answered by one query, the list does not apply that filter, and a notice above the table names it and says why; see Filter and search a list. The Company, Updated and Next activity headers sort the whole list; the other headers sort the rows of the page on screen and say so (see Columns and sort). Clicking a row opens the company\'s page.\nThe Contacts column is a count kept on the company and moved with '
4514
4647
  },
4515
4648
  {
4516
4649
  path: '/content-and-data/crm/companies',
@@ -5014,7 +5147,7 @@ export const DOCS_SECTION_INDEX = [
5014
5147
  title: 'Leads',
5015
5148
  heading: 'The Leads list',
5016
5149
  anchor: '#the-leads-list',
5017
- text: 'The list shows the most recently seen leads first — a person who booked yesterday sits above one who signed up last month, whichever came first. It keeps that order: the column headers do not re-sort it. Each row carries:\n| Column | What it shows |\n| Lead | The name the person gave, with their email beneath it — or the email alone. |\n| Company, Title | The lead\'s own company and job title, as text. |\n| Status | New, Nurturing, Working, Qualified or Unqualified — see Lead statuses. Change it in place from the row. |\n| Email | The last verdict on the lead\'s address — see Email state — or a dash when nothing is known. |\n| Owner | The team member working the lead, or Unassigned. A lead inherits its contact\'s owner when one is assigned on capture. |\n| Source | Every surface that captured this person: Booking, the form they submitted, an import, New lead, or the API — and Sign-up on leads filed before sign-ups stopped making leads. |\n| Lead source | The lead\'s lead source. |\n| Industry, Rating | Off until you turn them on from the column menu. |\n| Tags | The lead\'s tags. |\n| Campaign | The campaigns the lead is filed under, by name. Under a site only — a campaign belongs to one site. |\n| Last seen | When the person last did something on your site. |\nLead statuses {#lead-statuses}\nA lead moves through its statuses in the order a person works one:\n| Status | What it means |\n| New | Nobody and nothing has touched the lead yet. A lead your site captured carries no status of its own and reads as New. |\n| Nurturing | Automated email is reaching the lead — a sequence sent it a step, or a campaign email was delivered to it — and nobody has engaged yet. |\n| Working | A person is in a conversation with the lead: it replied to a sequence, or a teammate set it to Working. |\n| Qualified |'
5150
+ text: 'The list shows the most recently seen leads first — a person who booked yesterday sits above one who signed up last month, whichever came first. A column header sorts it another way — see Columns and sort. Each row carries:\n| Column | What it shows |\n| Lead | The name the person gave, with their email beneath it — or the email alone. |\n| Company, Title | The lead\'s own company and job title, as text. |\n| Status | New, Nurturing, Working, Qualified or Unqualified — see Lead statuses. Change it in place from the row. |\n| Email | The last verdict on the lead\'s address — see Email state — or a dash when nothing is known. |\n| Owner | The team member working the lead, or Unassigned. A lead inherits its contact\'s owner when one is assigned on capture. |\n| Source | Every surface that captured this person: Booking, the form they submitted, an import, New lead, or the API — and Sign-up on leads filed before sign-ups stopped making leads. |\n| Lead source | The lead\'s lead source. |\n| Industry, Rating | Off until you turn them on from the column menu. |\n| Tags | The lead\'s tags. |\n| Campaign | The campaigns the lead is filed under, by name. Under a site only — a campaign belongs to one site. |\n| Last seen | When the person last did something on your site. |\nLead statuses {#lead-statuses}\nA lead moves through its statuses in the order a person works one:\n| Status | What it means |\n| New | Nobody and nothing has touched the lead yet. A lead your site captured carries no status of its own and reads as New. |\n| Nurturing | Automated email is reaching the lead — a sequence sent it a step, or a campaign email was delivered to it — and nobody has engaged yet. |\n| Working | A person is in a conversation with the lead: it replied to a sequence, or a teammate set it to Working. |\n| Qualified'
5018
5151
  },
5019
5152
  {
5020
5153
  path: '/content-and-data/crm/leads',
@@ -5623,7 +5756,7 @@ export const DOCS_SECTION_INDEX = [
5623
5756
  title: 'Saved views',
5624
5757
  heading: 'Columns and sort',
5625
5758
  anchor: '#columns-and-sort',
5626
- text: 'Manage columns in any list\'s column menu chooses what shows, and Move left / Move right in the same menu put a column where you want it. A view keeps both — the choice and the order — and a view saved before a column existed shows the new column too, after the ones it names. On the Leads, Contacts and Tasks lists the column headers do not sort: each keeps its query\'s order — newest first, or for tasks soonest due first (Done: most recently due first). On the Companies and Deals tables a column header sorts the rows of the page on screen only; the pages themselves keep the list\'s own order.'
5759
+ text: 'Manage columns in any list\'s column menu chooses what shows, and Move left / Move right in the same menu put a column where you want it. A view keeps both — the choice and the order — and a view saved before a column existed shows the new column too, after the ones it names.\nEvery column header sorts, and a view keeps the order you pick. Each list opens in its own order — newest first, or for tasks soonest due first (Done: most recently due first) — and a header sorts one of two ways:\n- The whole list. A column the list stores on every record — a name, a title, a company, a date, an amount, the email verdict, a task\'s priority — re-reads the list in that order, every page of it. Such an order holds while no filter or search narrows the list (the Leads list\'s Status and the My tasks, All open and Done task views don\'t count; the dated task views keep their due order); add one and the list goes back to its own order, and a notice above the table says so.\n- This page. A column read from somewhere else — an owner\'s or a campaign\'s name, a picklist value in the order your organization keeps its values, a contact\'s per-site stage, tags or custom fields — sorts only the rows of the page on screen. Its header says so, and so does a notice; the pages keep the list\'s order.\nA view saved sorted by a column the list cannot sort as a whole opens in the list\'s own order, and a notice says so.'
5627
5760
  },
5628
5761
  {
5629
5762
  path: '/content-and-data/crm/views',
@@ -9599,7 +9732,7 @@ export const DOCS_SECTION_INDEX = [
9599
9732
  title: 'Webhooks',
9600
9733
  heading: 'Outbound webhooks',
9601
9734
  anchor: '#outbound-webhooks',
9602
- text: 'Send an HTTP request to a URL you control when a site event fires — for example, post to a Slack endpoint or your own API when a form is submitted or a new booking comes in.\n1. Add an outbound webhook and paste the destination URL.\n2. Choose the event that should fire it.\n3. Save. Aglyn calls your URL with the event payload each time it fires.'
9735
+ text: 'Send an HTTP request to a URL you control when a site event fires — for example, post to a Slack endpoint or your own API when a form is submitted or a new booking comes in.\n1. Add an outbound webhook and paste the destination URL.\n2. Choose the event that should fire it.\n3. Save. Aglyn calls your URL with the event payload each time it fires.\nEach delivery is a POST of JSON with four keys: event (such as formSubmission), payload (the event\'s data — for a form, formName, path and every submitted field), sentAt, and text, a readable summary of the same event. When the webhook has a secret, the X-Aglyn-Signature header is the HMAC-SHA256 of the body under it.\nPost every form submission to Slack {#slack}\nSlack, Google Chat and Microsoft Teams incoming webhooks post the text key as the message, so no translating service is needed in between.\n1. In Slack, create an app with Incoming Webhooks turned on, add a webhook to the channel you want, and copy its https://hooks.slack.com/services/… URL.\n2. Under Automation → Webhooks, add an outbound webhook named e.g. Slack and paste the URL.\n3. Under Automation → Workflows, choose New workflow, pick Form submitted as the trigger, and add one step: Send a webhook, picking Slack. Save.\nEach submission then arrives as:\nThe workflow\'s Runs read webhook 200 for each one Slack accepted. To post only one form\'s submissions, build it as an action on Form submitted with a Form is condition and the same Send a webhook step instead.'
9603
9736
  },
9604
9737
  {
9605
9738
  path: '/marketing-and-automation/workflows-and-actions/webhooks',