Category: Saclab

  • Story 48.1 Allowing “Removed” Products back in “Stock”

    General Info

    Our automation currently marks products as Removed by Seller or Removed from Sale when stock is set to 0, either via WordPress or via the Airtable field “quantity” + sync. Once removed, there is no way to restore the product—this creates a dead end.

    Current behaviour:

    If we change the quantity back to 1, the product status does not return to “In Stock”, and the order flow for future orders becomes disrupted. Product Statuses in Airtable are incorrectly displayed for future orders. Email notifications may not be sent, and the product may not appear on the website. WordPress continues to display the “Removed on [Date]” tag, even though the product is technically restocked.

    We currently only send a Slack notification in #syb_bag_was_removed_by_seller when a seller removes a product via their account. There is no Slack notification when an admin manually removes a product by setting quantity to 0.

    Expected behaviour:

    This story enables the sales team to restore a removed product by setting the quantity back to 1 (in WordPress or Airtable) and syncing. The product status should return to In Stock, and all standard order flows and notifications should resume as if it had never been removed. Additionally:

    • The WordPress tag should update to “Back in stock on [Date]”

    • Slack notifications should be posted when either sellers or admins remove or restore products

    • When an admin removes a product manually, the admin’s email address should be included in the Slack message

    • All such notifications should be posted in a unified Slack channel renamed to #bag_was_removed

    Changes

    • Allow quantity change from 0 → 1 for products with status Removed by Seller or Removed from Sale

    • On sync or manual WooC update:

      • Set product status to Stock in Airtable and InStock in WooC

      • Update or append WooC log: “Back in stock on [Date]”

    • Trigger existing “Product Is Live” email to seller upon restoration

    • Rename Slack channel from #syb_bag_was_removed_by_seller to #bag_was_removed

    • Post Slack message in #bag_was_removed on restoration:

      The [Bagname (w/ link)] [SKU] was put back in stock by [admin email]

    • New: When a product is manually removed by admin (quantity set to 0), post in #bag_was_removed:

      The [Bagname (w/ link)] [SKU] was removed by admin

      admin email: [admin@email.com]

    • Ensure all downstream flows (selling, status transitions, email notifications) behave identically to a standard in-stock or removed product

    • Confirm products can be removed and restored repeatedly without breaking order flows or logging

    User Story

    As a sales team member,

    When I restore a product by changing its quantity from 0 back to 1 and syncing or updating,

    Then the product should appear back in stock on the website,

    And all order and notification workflows should work exactly as for any in-stock product,

    Including sending the standard “Your bag is now live” email to the seller.

    As a sales team member,

    When a product is manually removed by admin/teammember (quantity set to 0),

    Then a Slack message should be sent, just like when a seller removes a product,

    Including the admin’s email who triggered the removal,

    So the team has visibility into who took the action.

    As a sales team member,

    I want all removal and restoration messages to appear in a single renamed Slack channel: #bag_was_removed.

    Acceptance Criteria

    #

    Gherkin Scenario

    01

    Scenario: Restore via WooC quantity update
    Given a product status is Removed by Seller or Removed from Sale and quantity = 0
    When sales updates quantity to 1 in WordPress and clicks “Update”
    Then product status changes to “Stock” in Airtable and appears live on site
    And WordPress shows log: “Back in stock on [Date]” next to the product in backend

    02

    Scenario: Restore via Airtable sync
    Given a product status is Removed by Seller or Removed from Sale and quantity = 0
    When sales updates quantity to 1 in Airtable and clicks “product sync”
    Then product status changes to InStock on site and to Product Status “Stock” in Airtable

    03

    Scenario: Restoration notification
    Given a product has been restored to stock
    When status changes back to In Stock from Removed by Seller or Removed from Sale
    Then send the existing “Your bag is now live” email to the seller
    And send Slack notification in #bag_was_removed: “The [Bagname (w link)] [SKU] was put back in stock by [admin email]”

    04

    Scenario: Normal sell-through after restoration
    Given a restored product with quantity = 1
    When a customer purchases the product
    Then status transitions to Sold and all sale-related notifications and email flows occur as usual

    05

    Scenario: Subsequent removals
    Given a restored product
    When quantity is set back to 0 by admin or removed via automation
    Then existing removal workflow and emails execute as before
    And the product may be removed and restored multiple times without breaking order flow

    06

    Scenario: Admin-triggered removal notification
    Given a product is manually removed by admin via quantity set to 0 in WordPress or Airtable
    When the change is saved or synced
    Then post Slack message in #bag_was_removed:“The [Bagname (w/ link)] [SKU] was removed by admin”“admin email: [admin@email.com]”“seller email: [seller@email.com]”

    07

    Scenario: Rename Slack channel
    Given Slack notifications exist for seller and admin removals
    When we implement this story
    Then rename Slack channel from #syb_bag_was_removed_by_seller to #bag_was_removed
    And route all removal/restoration messages there

    08

    Scenario: Limit removal to valid stock status

    Given a product status is currently Stock in Airtable

    When a user tries to remove the product by setting the quantity to 0 (via WordPress or Airtable)

    Then allow the removal workflow to proceed

    But if the product status is not Stock, prevent the removal and show an error or ignore the update

    09

    Scenario: Send “Bag Removed & Returning” email with tracking link

    Given a product is removed (quantity set to 0)

    And the field SYB Return Tracking Info is filled with a valid UPS tracking number

    When the removal workflow is triggered

    Then additionally send the “Your bag is on its way back to you” email to the seller
    SYB – 9. Bag returned after removing (S)
    SYB – 9 Bag returned after removing (S) DE

    And include the UPS tracking link in the email content

  • Story 23.6 Notify Me EXTENDED “Similar Items” eMail function

    General info

    We’re enhancing our "Notify Me" email funnel to support two parallel tracks—Exact-SKU restock and Similar-item suggestions—across three languages (EN, DE, FR). Existing Exact-SKU triggers remain in place; we’ll add a new Similar-item track with a cap of three suggestions per signup. Both tracks have fallback emails (14-day for SKU, 75-day for Similar-item). Leads can unsubscribe via Mailchimp footer, which should remove them from all Notify Me communications for that product.

    Changes

    • Retain existing Exact-SKU restock and 14-day fallback functionality

    • Add Similar-item suggestion track for brand+model+price+color matches within 75 days

    • Limit Similar-item suggestions to a maximum of three per signup

    • Introduce 75-day fallback email for Similar-item track

    • Honor Mailchimp unsubscribes by removing leads from both tracks

    • Support EN, DE, FR versions of the two new emails

    User story

    As a customer signed up for "Notify Me" on a sold-out product,
    When triggers fire for Exact-SKU or Similar-item restocks,
    Then I receive timely, language-appropriate emails (EN/DE/FR) up to the defined caps and fallbacks,
    And if I unsubscribe, I stop receiving all Notify Me emails for that product.

    Process flow diagram

    Screenshot 2025-06-04 at 12.00.36.png

    Acceptance criteria

    #

    Gherkin Scenario

    Screenshot

    01

    Scenario: Exact-SKU restock email (function already existing

    Given: lead signed up for Notify Me

    When: exact SKU appears in stock by 10:30 CEST next working day

    Then: send “Back in stock” email (EN/DE/FR) and unsubscribe from SKU track

    02

    Scenario: Similar-item suggestion

    Given: lead signed up for Notify Me

    When: a new item matching brand+model+size+color appears within 75 days. (Note: we might change the match to brand+model+color later, if we get too little matches)

    Then: send “We found something you’ll love” email (EN/DE/FR) and increment suggestion count

    Template EN Link: https://us12.admin.mailchimp.com/templates/editor?id=10086685

    Subject EN: We found a |Brand| |Model| you’ll love!

    Preview EN: This bag ticks all your boxes (almost).

    Template DE Link: https://us12.admin.mailchimp.com/templates/editor?id=10086724

    Subject DE: Diese |Brand| |Model| wird Ihnen gefallen!

    Preview DE: Diese Tasche erfüllt (fast) alle Wünsche.

    Template FR Link: https://us12.admin.mailchimp.com/templates/editor?id=10086684

    Subject FR: Une nouveauté |Brand| |Model| qui va vous plaire !

    Preview FR: Un sac qui répond à (presque) toutes vos envies.

    03

    Scenario: Similar-item suggestion cap

    Given: lead has received 3 suggestions

    When: another matching item appears

    Then: do not send additional suggestion emails

    04

    Scenario: 14-day fallback (function already existing)

    Given: 14 days elapsed since signup without exact-SKU email sent

    Then: send “It still hasn’t returned” email (EN/DE/FR) and unsubscribe from SKU track

    05

    Scenario: 75-day fallback

    Given: 75 days elapsed since signup with fewer than 3 suggestions sent

    Then: unsubscribe from Similar-item track

    06

    Scenario: Mailchimp unsubscribe

    Given: lead unsubscribes via footer link

    Then: remove lead from both Exact-SKU and Similar-item tracks

  • Epic 48. Allowing “Removed” Products back in “Stock”

    General info

    Our automation currently marks products as Removed by Seller or Removed from Sale when stock is set to “0” – either via WordPress or via Airtable field “quantity” + sync. Once removed, there is no way to revert the product back online, which creates a dead end. If we currently change it back to qantity “1”, the order flow for future orders is disrupted and shows bugs. This story enables the sales team to restore a removed product by setting the quantity back to 1 (in WordPress or in Airtable) and syncing, returning the product status to In Stock so that all normal order flows and notifications resume as if it had never been removed.

  • Story 51.5 Payment Link Failure Handling for On Hold Orders

    General info

    We’re improving the handling of HiPay payment links for direct bank transfers. When a customer receives a auto-generated payment link by email but subsequently fails to complete payment, the system should:

    Only for orders that were already in On-Hold status with the Direct Bank Transfer method

    • Prevent false "oder did not go through, item back online" notifications sent to sellers

    • Notify the buyer of the failed attempt with instructions and banking details

    • Keep the order in On-Hold state with a note of the failed method

    • Allow subsequent retries without resetting the order status

    • Upon a successful retry (same link or alternative), update the order to Processing and reflect the actual payment method

    Existing Problem

    • When a customer tries paying with the auto-generated link and the transaction fails, then the “on hold” order switches to “failed”. Described in


      SCLB-1250

    Changes

    • New buyer-facing failure email after a HiPay link failure, limited to on-hold direct bank-transfer orders

    • Suppression of seller back-online notifications on payment-link failures for those orders

    • Retain order status as "On-Hold" and log failure in order notes only for pre-existing on-hold orders

    • Update payment method on successful retry (link or alternative method)

    User story

    As a customer, I want to pay via a payment link from the email “Invoice: We are waiting on your payment). Using a auto-generated payment link on an existing on-hold order, When my initial payment attempt fails via HiPay, Then I want to be able to retry the transaction. The Order should stay “On Hold” until I’ve successfully paid.

    Note: This flow should also work for manual orders with status “on hold”.

    Acceptance criteria

    #

    Gherkin Scenario

    01

    Scenario: Payment link failure suppression for on-hold orders
    Given: an order is On-Hold with “Invoice…” w payment link email sent
    When: a payment attempt via the HiPay link fails
    Then: the order remains On-Hold
    And: the seller does not receive a "product back online" notification
    And: the products Quantity does not change

    Note: We might send the email “Invoice…” w payment link for On Hold orders with ALL PAYMENT METHODS in the future, not just Direct Bank Transfer. Please respect this future change.

    02

    Scenario: Buyer failure notification email
    Given: an On-Hold Direct Bank Transfer order’s HiPay link payment has failed
    When: the failure is detected
    Then: send an email to the buyer with:
    – Notice that the payment failed
    – Order remains active/on-hold
    – Direct bank transfer details (IBAN, BIC)
    – Link to retry via HiPay

    02

    Scenario: Log failure in order notes and slack notifaction
    Given: an On-Hold order’s payment link failure event
    When: failure is processed
    Then: add an order note: "Payment attempt via {method} failed on {timestamp}. Order remains On-Hold."

    And: send slack notificaction in channel #transactions: "[Order# link] Payment attempt via {method} failed on {timestamp}. Order remains On-Hold. [link to hipay transaction]"

    03

    Scenario: Retry succeeds with HiPay link
    Given: a prior failure on a HiPay link for an On-Hold Direct Bank Transfer order
    When: the customer retries and succeeds via the same link
    Then: confirm order status moves to Processing 
    And: send out email to buyer: order confirmation

    And: update payment method to [payment method] 
    And: reflect payment method in
    – Order confirmation page
    – My Account
    – invoice
    – WooCommerce order
    – Airtable

  • Promotion box on saclab.com/sell

    As a seller visiting http://saclab.com/sell
    I want to see a promotional box highlighting current commission offers
    So that I am encouraged to submit high-value bags during the promotion period

    Background: Given I am on the "https://www.saclab.com/sell " page

    Scenario: Show promotion box when active and within date range
    Given the promotion box is enabled in the admin panel
    And today’s date is within the promotion start and end dates
    When the page loads
    Then I should see a promotion box displayed

    And when I hover over the promotion box

    Then I should see the hover effect

    And if a link is available

    When I click the promotion box

    Then I should be following the link

    Mob: https://www.figma.com/design/6KT0tZfJw3u7R8b5pCH8vw/Saclab-Team-Library?node-id=11443-122809&m=dev

    Desk: https://www.figma.com/design/6KT0tZfJw3u7R8b5pCH8vw/Saclab-Team-Library?node-id=11440-7459&m=dev

    Hover effect (demo only on desk but should work on both mobile and desktop)

    https://app.box.com/s/gk2r5ahm9xsf0p5w1ceb99kqzzrrb7va

    Scenario: Promotion box content is editable by admin
    Given I am an admin
    When I open the promotion box settings
    Then I should be able to edit text
    And I should be able to add link
    And I should be able to define the start and end date of the promotion
    And I should be able to enable or disable the promotion box

    And I can Choose the background and text colour of the default setting

    And I can choose the background and text colour of the hover setting

    Scenario: Hide promotion box when outside promotion date range
    Given the promotion box is enabled in the admin panel
    And today’s date is outside the promotion start and end dates
    When the page loads
    Then I should not see the promotion box

    Scenario: Hide promotion box when admin disables it
    Given the promotion box is disabled in the admin panel
    When the page loads
    Then I should not see the promotion box

  • Gift Card in Hong Kong Dollars

    Only digital gift card is available for HKD market (similar to the US market)

    Scenario: Admin sets custom HKD values for gift cards
    Given the admin has enabled HKD in yayCommerce → yayCurrency
    Then the admin can set specific gift card values in HKD (that’s different from EU or US)
    and those amounts should be used on the Hong Kong storefront

    Scenario: Display gift card in HKD for Hong Kong storefront
    Given the user is browsing from the Hong Kong storefront
    When the user visits the gift card page
    Then the default currency shown should be Hong Kong Dollars (HKD)
    And all gift card amount options (e.g. 500, 1000, 2000) should be displayed in HKD

    And the gift card photo should show HKD

    Scenario: Gift card email confirmation shows value in HKD
    Given the user purchased the gift card from the Hong Kong storefront
    Then the gift card confirmation email should show the gift card value in HKD

    Scenario: Gift card redemption in different currencies
    Given the user has a gift card from a different storefront
    When the recipient redeems the gift card on another storefront
    Then the coupon’s value should be converted to the currency of the storefront of the shipping address following the conversion rate set in admin panel at the moment
    (already working with USD – EURO)

    Example:

    • Given the user has a valid 200€ voucher from the EU storefront
      And the user is checking out with a shipping address in Hong Kong
      When the user enters the 200€ voucher code during checkout
      Then the voucher amount should be converted from EUR to HKD using the current exchange rate
      And the converted HKD amount should be deducted from the shopping cart total

  • Hong Kong store checkout

    Scenario: Checkout without "shipping outside EU" popup
    Given the user is on the Hong Kong storefront
    When the user proceeds to checkout
    Then all prices in the checkout should be displayed in Hong Kong Dollars (HKD)
    And the popup warning about "shipping outside the EU" should NOT be shown

    Scenario: User changes shipping address to Hong Kong
    Given the user is checking out from the EU, US, or Global storefront
    When the user changes their shipping address to "Hong Kong"
    Then all prices in the checkout should update to Hong Kong Dollars (HKD)
    And the popup warning about "shipping outside the EU" should NOT be shown
    And any location-based conditions (currency, tax display, fees) should follow the Hong Kong storefront rules

    Scenario: User changes billing address to Hong Kong
    Given the user is checking out from the EU, US, or Global storefront
    When the user changes their billing address to "Hong Kong"

    And the box “Ship to a different address” is unticked (Shipping address = billing address)
    Then all prices in the checkout should update to Hong Kong Dollars (HKD)
    And the popup warning about "shipping outside the EU" should NOT be shown
    And any location-based conditions (currency, tax display, fees) should follow the Hong Kong storefront rules

  • Admin configures HKD in yayCurrency

    Given the admin navigates to yayCommerce → yayCurrency settings
    then admin see HKD as the third active currency
    and the admin can choose to set the exchange rate manually or set it to automatic
    And the admin can apply a custom fee

    Screenshot 2025-05-26 at 11.15.09.png

  • Location/ Language switcher: add Hong Kong in Location

    Scenario: Location switcher includes Hong Kong option

    Given the user clicks on the location/ language switcher
    Then "Hong Kong" should appear as an option in the list

    Screenshot 2025-05-21 at 11.32.33.png

    Scenario: Selecting Hong Kong in language switcher
    Given the user selects "Hong Kong" from the location switcher
    Then the storefront should switch to the Hong Kong version
    And the currency should change to HKD

    Scenario: automatic location detection

    Given the system automatically detects that the user’s location is in Hong Kong

    When they visit the site for the first time,

    Then the region is auto-set to Hong Kong (prices shown in HKD) without any prompt.

  • Bag Vault – Automatic Display of Purchased Bags

    User Story

    As a customer,
    I want bags I have purchased to appear automatically in my Bag Vault,
    So that I can easily access and manage my owned bags without any extra effort

    Scenario: Logged-in user completes a purchase
    Given I am logged in with my account
    And I purchase a bag successfully and the return period is over
    Then the purchased bag should appear in my Bag Vault
    And the bag details should include model, color, size, image, and purchase date etc.

    Scenario: Guest user purchases a bag and later registers with the same email
    Given I am not logged in
    And I complete a purchase using my email "user@example.com" and the return period is over
    When I later create an account using the same email "user@example.com"
    Then the bag(s) I purchased should appear in my Bag Vault

    Scenario: All past purchased bags automatically appear in Bag Vault
    Given I am logged in with my account and I have previously purchased bag(s) and the return period is over
    When I navigate to "My Bag Vault"
    Then all my previously purchased bag(s) should appear in my Bag Vault
    And each bag should display all available information including its brand, model, color, size, hardware, material, image, and purchase date, price bought. and the invoice (from saclab) should be uploaded in the “invoice” field

    Scenario: User can add serial number and insure information

    Given A bag that I have previously purchased and the return period is over is automatically shown in my bag vault
    When The “serial number” and “insure” field are missing

    Then I should see the “Add missing info” button

    And I should see the text “Help us keep your bag safe — by adding the serial number, we can flag it if it’s ever reported missing and spotted in our system.” under the bag’s picture (copy will be finalized soon)

    And an email should be sent to me every 4 weeks to remind me to add the information. This email is sent until I add the serial number

    https://www.figma.com/design/6KT0tZfJw3u7R8b5pCH8vw/Saclab-Team-Library?node-id=11666-3453&m=dev

    Mailchimp:

    Eng:

    Sub:

    TEmplate: https://us12.admin.mailchimp.com/templates/edit?id=10086755#f_folder:17913;s:100;t:files-list

    Ger:

    Subject:

    Template:

    FRE:

    Subject:

    Template:

    Scenario: User add serial number and insure information

    Given I am viewing a bag I purchased from saclab in my bag vault and the return period is already over and The “serial number” and “insure” field are missing

    When I click “Add missing info” button

    Then I should see the Add missing info form

    And

    When I fill up the form (text is still to be updated)

    Then All new information should be saved in all system

    And I should see the success promt (text is still to be updated)

    And the “add missing info” should disappear

    https://www.figma.com/design/6KT0tZfJw3u7R8b5pCH8vw/Saclab-Team-Library?node-id=11666-13638&m=dev

    https://www.figma.com/design/6KT0tZfJw3u7R8b5pCH8vw/Saclab-Team-Library?node-id=11669-11641&m=dev