Category: Saclab

  • Story 72.2. Buyer Fee increase from 9% to 13%

    > 1000euro:
    all products on the website should be increased from 9 to 13% (buyer fee)

    <1000 euro: 130€

    sync with airtable and Hubspot

    TAB theme settings for buyer fee

  • Le registry traffic source (UTM)

    As we are running ads for Le registry page, we would like to track which one are coming in from the which ads, so we know if the ads are working

    User story

    As an Airtable user

    I want to see the source of the le registry submission

    So that helps to analyze the ads campaign and understand the source of the submission

     

    Acceptance criteria

     

    01

    Given: ads campaign with the link that included UTMs

    When: click in the campaign with this link as example: https://saclab.com/bags/bottega-veneta-jodie-mini-lamb-light-blue/?utm_source=Facebook&utm_medium=Video&utm_campaign=bottega-veneta-jodie-mini-lamb-light-blue&utm_content=somename111
    AND submit new le registry submission

    Then: save cookies for this with UTMs to the bag submitted record https://airtable.com/appYjRuQ4YEFTUwtb/tbloP7ITyOCRbYsea/viwmuJNWLzba3r5bJ/recVYmperMEN5juNo?blocks=hide

     

    02

    Given: https://airtable.com/appYjRuQ4YEFTUwtb/tbloP7ITyOCRbYsea/viwmuJNWLzba3r5bJ?blocks=hide

    When: I open a Le registry record in AirTable

    Then: I see these columns in the Airtable:

    • utm_source: The source of the traffic (e.g., Google Ads, Facebook Ads).

    • utm_medium: The marketing medium (e.g., CPC, banner).

    • utm_campaign: The specific campaign name.

    • utm_content: specific ad name

     

    Example:

    utm_source=meta&utm_medium=cpc&utm_campaign={{campaign.name}}&utm_content={{ad.name}}

  • Release Notes – Saclab General – Release 24.07 – Jul 24 17:31

    How to use this page:

    Find your selected Jira issues in the table below. Select the expand to use them as your source of truth to write release notes.

    Release

    https://cheitgroup.atlassian.net/projects/SCLB/versions/11243

    Date

    Version

    Release 24.07

    Description

    Contributors

    Alexander Böhringer

    Issues in this release

    Before you share the page, review the contents of each Jira issue and remove any sensitive data.

    Issue

    Summary

    Issue Type


    SCLB-1518

    Update High-Value Order Tracker Threshold from €2000 to €5000

    Task

    Summary

    New Features

    Improvements to existing features

    Bug fixes

  • Release Notes – Saclab General – 17.07 Release – Jul 17 16:27

    How to use this page:

    Find your selected Jira issues in the table below. Select the expand to use them as your source of truth to write release notes.

    Release

    https://cheitgroup.atlassian.net/projects/SCLB/versions/11210

    Date

    Version

    17.07 Release

    Description

    Contributors

    Alexander Böhringer

    Issues in this release

    Before you share the page, review the contents of each Jira issue and remove any sensitive data.

    Issue

    Summary

    Issue Type


    SCLB-1444

    Story 23.6 Notify Me EXTENDED "Similar Items" eMail function

    Task

    Summary

    New Features

    Improvements to existing features

    Bug fixes

  • Release Notes – Saclab General – 15.07 Release – Jul 17 13:50

    How to use this page:

    Find your selected Jira issues in the table below. Select the expand to use them as your source of truth to write release notes.

    Release

    https://cheitgroup.atlassian.net/projects/SCLB/versions/11177

    Date

    Version

    15.07 Release

    Description

    Contributors

    Andrii KupriianovAlexander BöhringerThư Phan

    Issues in this release

    Before you share the page, review the contents of each Jira issue and remove any sensitive data.

    Issue

    Summary

    Issue Type


    SCLB-1473

    bag removed by seller -> Airtable quantity remains = 1

    Bug


    SCLB-1436

    Story 48.1 Allowing "Removed" Products back in "Stock"

    Task


    SCLB-1416

    Bag Vault – Automatic Display of Purchased Bags

    Task

    Summary

    New Features

    Improvements to existing features

    Bug fixes

  • Story 47.2 Photo Import Automation

    General info

    Why we need this

    Right now our team manually downloads ZIPs of bag photos from an external partner. We use these images to review each bag’s shape, color, and condition, then send them to our retouch agency. That takes time. With this automation, as soon as someone checks “Import Photos” in Airtable, the system will:

    1. Log in to the partner site and download the ZIP.

    2. Extract all images.

    3. Save them into Box under All Files/001_Sales/Bags/02 New Bags/External Partners_Luxclusif/YYYY_MM_DD/[SKU].

    4. Attach the photos back into the Airtable record for our sales team to review right away.

    This cuts out manual steps, speeds up review, and gives our photo team instant access for editing.

    User story

    As an Inventory Manager

    I want to check a box and have all bag photos fetched, saved in Box, and shown in Airtable

    So that I can import up to 30 bags at once without downloading or uploading by hand

    Credentials

    Direct Luxclusif Login

    Luxclusif Stage API

    Base URL: https://staging.upteamco.com/1api/

    Credentials
    ID:  2613
    GET: 1135ae4224213c50304c1f46fc46468b
    POST: 042756131e79896e2d1dfaa1b7b3ef99

    Box

    Account Type: Business

    Limited Access App: Photo Import App
    Client ID: x1e2jssnqvd0x48cpz3013nuzriy5sbh

    Primary Access Token: gLkO6Q9yLSuCCdyJ6haFwyXRzUtF0xLr

    Acceptance Criteria

    Screenshot

    01

    Start import
    Given up to 30 rows in “Bulk Bag Import” with valid “Photos (external)” links
    When I check “Import Photos”

    Then Status → “In Progress: Image Import” and the job kicks off

    Example “Photos (external)” link: http://store.luxclusif.com/product/DownloadImages?productId=275198

    Bildschirmfoto 2025-07-17 um 10.21.25.pngBildschirmfoto 2025-07-17 um 10.22.43.png

    02

    Download ZIP
    Given Status = “In Progress: Image Import” and correct login info

    When the job hits each link
    Then it logs in, downloads the ZIP for each SKU, or on failure Status → “Error: Image Import”

    Bildschirmfoto 2025-07-17 um 10.21.17.png

    03

    Extract images

    Given a ZIP is downloaded

    When the system unzips it

    Then all JPG/PNG files are extracted

    04

    Upload to Box

    Given images are extracted

    When it makes folders All Files/001_Sales/Bags/02 New Bags/External Partners_Luxclusif/YYYY_MM_DD/[SKU] and uploads

    Then each image is in the right Box folder

    Link to box folder: https://app.box.com/folder/331484713369

    Bildschirmfoto 2025-07-17 um 10.03.45.png

    05

    Attach in Airtable

    Given Box upload succeeds for a SKU

    When it updates that record

    Then photos appear in “Product Images”, and Status → “Images Imported”

    Bildschirmfoto 2025-07-17 um 10.24.25.png

    06

    Batch size

    Given 30 rows checked and valid links

    When the job runs

    Then it finishes all within 10 minutes, with no failures for good links

    07

    Errors & retries

    Given any step fails for a SKU

    When an error happens

    Then it retries up to 3×, and on final failure Status → “Error: Image Import” but other SKUs continue

  • Website Accessibility Compliance (WCAG 2.1 AA)

    User Story

    As a user with visual, motor, auditory, or cognitive impairments,
    I want the website to meet WCAG 2.1 AA accessibility standards (https://www.w3.org/TR/WCAG21/),
    So that I can navigate, understand, and interact with all content and features without barriers.

    1

    Scenario: Semantic HTML structure supports screen readers

    Given a user navigates the website using a screen reader
    Then each page must contain semantic landmarks (e.g. header, nav, main, footer)
    And headings must follow a logical hierarchical order (h1, h2, h3, …)
    And all ARIA roles and attributes must be used appropriately where native HTML is insufficient (only use ARIA when absolutely needed)

    2

    Scenario: Images include meaningful alternative text

    Given a user encounters an image on any page
    Then every image (including background image) must include a descriptive alt attribute

    3

    Scenario: All interactive elements are keyboard accessible

    Given a user navigates the website using only a keyboard
    Then all buttons, links, form elements, and controls must be reachable using Tab
    And focus order must follow the visual layout and user expectations
    And the focused element must have a clear visual indicator (e.g. outline or border)

    4

    Scenario: Provide high contrast mode toggle in the website footer

    Given the user scrolls to the footer of any page
    Then the footer must include a clearly labeled button or link called "High Contrast Mode"

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

    Mobile: https://www.figma.com/design/6KT0tZfJw3u7R8b5pCH8vw/Saclab-Team-Library?node-id=11897-3607&m=dev
    And the toggle must be accessible via keyboard and screen readers
    And activating the toggle must apply or remove the high contrast mode as defined
    And the toggle state must visually indicate whether high contrast is active
    And the user’s preference must persist across pages and sessions

    4.1

    Scenario: Optional high contrast mode toggle for improved readability

    Given a user requires enhanced visual contrast
    When the user clicks the "High Contrast Mode" toggle
    Then the website must apply a high-contrast stylesheet or class
    And all text must meet a minimum contrast ratio of 4.5:1 against the background
    And interactive elements (buttons, links) must remain clearly distinguishable
    And the user’s preference should persist across sessions
    And the toggle must be accessible via keyboard and screen readers

    Toggle button in footer:

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

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

    Toogle button: https://www.figma.com/design/6KT0tZfJw3u7R8b5pCH8vw/Saclab-Team-Library?node-id=11940-2531&m=dev

    5

    Scenario: Text can be resized up to 200% without loss of content or functionality

    Given a user zooms the browser up to 200%
    Then all text must remain legible
    And content must not overflow, be cut off, or require horizontal scrolling

    6

    Scenario: Forms are accessible and assistive-technology friendly

    Given a user interacts with a form
    Then each form field must have a visible label
    And each input must be programmatically labeled (using label for=, aria-label, or aria-labelledby)
    And error messages must be associated with the relevant inputs via ARIA or HTML
    And required fields must be explicitly indicated

    7

    Scenario: Avoid flashing and motion that causes seizures or disorientation

    Given the site includes animations or effects
    Then no element may flash more than 3 times per second
    And users with prefers-reduced-motion must see reduced or no animation

    8

    Scenario: Language is correctly defined

    Given a user visits a page
    Then the <html> element must include the correct lang attribute (e.g. lang="en", lang="fr")
    And any language change within the content must be marked using lang attributes

    9

    Scenario: Accessible name and role for custom components

    Given a user interacts with a custom component (e.g. modal, dropdown, slider)
    Then it must expose a name, role, and state to assistive technologies using ARIA roles and properties
    And the component must be operable via keyboard and screen reader

  • Release Notes – Saclab General – 10.07 Release – Jul 15 11:19

    How to use this page:

    Find your selected Jira issues in the table below. Select the expand to use them as your source of truth to write release notes.

    Release

    https://cheitgroup.atlassian.net/projects/SCLB/versions/11144

    Date

    Version

    10.07 Release

    Description

    Contributors

    Thư Phan

    Issues in this release

    Before you share the page, review the contents of each Jira issue and remove any sensitive data.

    Issue

    Summary

    Issue Type


    SCLB-1478

    [BUG] Bag Vault – Register bag / submit another button is missin on mobile version

    CB

    Summary

    New Features

    Improvements to existing features

    Bug fixes

  • Story 1.5.3 Product Detail Page – Performance Improvement

    General Info

    The Product Detail Page on saclab.com has a Largest Contentful Paint (LCP) of 5.2 s on mobile – which exceeds the recommended target of 2.5 s.

    The Lighthouse report confirms the hero bag image is the likely LCP element but is being lazy-loaded or discovered late, delaying final rendering.

    Other issues on the product page include: unnecessary legacy scripts, third-party scripts like CookieYes and HiPay running on non-checkout pages, render-blocking CSS, and missing static caching headers.

    saclab.com_productpage_l…

    Bildschirmfoto 2025-07-09 um 14.57.05.png

    User Story

    As a customer viewing a product, I want the main bag image and details to appear immediately so I trust the site’s quality and feel ready to buy.

    Acceptance Criteria

    ID

    Scenario

    Details

    01

    Scenario: Hero product image loads eagerly and is preloaded

    Given the bag image is the LCP element

    When the page loads

    Then the hero image is not lazy-loaded and is preloaded properly

    Evidence: largest-contentful-paint.numericValue = 5200 ms shows hero image discovered late.

    Why: Lazy-loading above-the-fold images delays discovery, hurting LCP and FCP.

    Action direction: Exclude hero image from lazy-load, use loading="eager", fetchpriority="high", and add <link rel="preload" as="image"> in <head>. Devs should confirm this works with the theme.

    02

    Scenario: Product hero image uses next-gen format

    Given the hero image is JPEG

    When the page loads

    Then it’s served as WebP where possible

    Evidence: “Serve images in next-gen formats” could save ~30–40% on hero images.

    Why: Smaller image payload improves LCP.

    Action direction: Auto-Convert hero images to WebP; test for color accuracy.

    03

    Scenario: Render-blocking CSS is eliminated

    Given large CSS blocks the paint

    When the page loads

    Then only critical CSS is loaded upfront

    Evidence: “Eliminate render-blocking resources” flags ~150 KB CSS.

    Why: Blocking styles delay FCP/LCP.

    Action direction: Use WP Rocket’s Inline Critical CSS and Remove Unused CSS. Dev to test styling carefully.

    04

    Scenario: Cookie and chat scripts run only when needed

    Given they run immediately

    When the page loads

    Then these scripts are deferred or delayed

    Evidence: “Minimize main-thread work” – CookieYes adds ~200 ms CPU time on load.

    Why: Third-party scripts slow Time to Interactive.

    Action direction: Use WP Rocket’s Delay JS Execution for consent/chat scripts; confirm they run on user interaction instead.

    05

    Scenario: HiPay SDK only loads where needed

    Given payments happen in checkout only

    When the product page loads

    Then HiPay scripts do not run

    Evidence: hipay-sdk.js visible in product page network log.

    Why: Adds 200–300 KB unused JS.

    Action direction: Wrap enqueue for is_checkout() only; or manage via Asset CleanUp.

    06

    Scenario: Static assets have efficient caching

    Given cache headers are missing

    When user revisits

    Then static assets are reused from cache

    Evidence: “Serve static assets with an efficient cache policy” flagged; TTL is 0 for key files.

    Why: Poor caching wastes bandwidth.

    Action direction: Use Cloudflare or server headers to apply long TTLs for images, CSS, and JS.

    Implementation Note:

    Each recommendation explains why it matters and what to aim for, but the dev team should adjust the best technical solution, verify on staging, and test across breakpoints. The goal is to bring LCP below 2.5 s, reduce Time to Interactive, and improve perceived speed.

  • Story 1.5.2 Product Feed (/bags) – Performance Improvement

    General Info

    The /bags product feed page currently has an LCP of ~5.5 s on mobile.

    The biggest driver is that the first visible product grid images (likely hero thumbnails) are discovered late — probably due to incorrect lazy-loading or missing preload hints.

    Other issues include: large DOM size, unused CSS, some images still in JPEG, and the HiPay SDK script unnecessarily loading on the listing page.

    saclab.com_bags_productf…

    Bildschirmfoto 2025-07-09 um 14.37.47.png

    User Story

    As a customer browsing /bags, I want visible products to load instantly without waiting for hidden ones so I can find what I want quickly.

    Acceptance Criteria

    ID

    Scenario

    Details

    01

    Scenario: Above-the-fold product images load eagerly and are preloaded

    Given grid product thumbnails drive LCP

    When the page loads

    Then the first visible images are not lazy-loaded and are preloaded

    Evidence: Lighthouse: “largest-contentful-paint.numericValue = 5474ms” confirms slow LCP due to grid images.

    Why: When above-the-fold images are lazy-loaded, the browser discovers them late, delaying LCP.

    Action direction: For the first ~6–8 visible product images: use loading="eager", fetchpriority="high" on <img>, and <link rel="preload" as="image"> in the <head>. Dev to confirm which images become LCP candidates at different breakpoints.

    02

    Scenario: Offscreen grid images are lazy-loaded

    Given thumbnails below the fold don’t need to load immediately

    When the page loads

    Then only visible images load upfront

    Evidence: The audit shows more images load upfront than needed, pushing network requests. Why: Loading all thumbnails delays the main grid.

    Action direction: Use loading="lazy" for offscreen items; confirm WP Rocket LazyLoad is correctly configured.

    03

    Scenario: Product images served in next-gen formats

    Given many grid images are still JPEG

    When they load

    Then they use WebP

    Evidence: “Serve images in next-gen formats” – significant savings potential.

    Why: Reduces payload, faster LCP.

    Action direction: Convert grid thumbnails to WebP; test for color fidelity.

    04

    Scenario: DOM size is reasonable

    Given product grids can create massive DOM trees

    When page loads

    Then initial HTML keeps DOM under control

    Evidence: Large grids often exceed ~4000+ nodes.

    Why: High DOM size increases layout cost. Action direction: Limit initial product count (e.g., 16 items) with auto“Load More” or pagination.

    05

    Scenario: Remove unused CSS

    Given the grid pulls in widget styles not needed

    When page loads

    Then only relevant CSS is served

    Evidence: “Remove unused CSS” flagged in prior audit – ~180 KB waste likely persists. Why: Redundant CSS blocks paint.

    Action direction: Enable WP Rocket Remove Unused CSS; verify nothing breaks in grid styling.

    06

    Scenario: HiPay SDK does not load unnecessarily

    Given payments only happen in checkout

    When the /bags page loads

    Then HiPay scripts are not included

    Evidence: HiPay script seen in page waterfall for /bags.

    Why: Large third-party payment JS (~200–300 KB) adds overhead for no reason.

    Action direction: Wrap enqueue for is_checkout() or unload with Asset CleanUp.

    Additional Note for Devs

    These recommendations explain why to fix each problem and how it typically works, but exact implementation must match our theme’s structure and breakpoints. For the grid images especially, test different viewport widths to see which images consistently become the LCP candidate.

    Use staging and verify LCP improvement in Lighthouse.