/
Technical Requirements Document - Phase 1

Technical Requirements Document - Phase 1

 

L’azurde Technical Requirements

 

Technical Documentation

 

Document Information

Information Classification

Confidential

Title of Document

L’azurde Technical Requirements

Author

Ahsan Zafar, Khalil ur Rehman, Wasif Hussain

Revision

0.1

Status

Draft

Document Code

NA

Document Owner

Ahsan Zafar, Khalil ur Rehman, Wasif Hussain

Issue Date

 

Reviewer

Wahab Hassan

Approver

Wahab Hassan

Target Release

 

 

Revision History

DATE

DESCRIPTION

SECTION

DONE BY

VERSION#

Approving Authority:

______________________

 

Purpose

The purpose of a this document is to define the technical requirements and specifications for L’azurde Omni-Channel Project. The document serves as a blueprint for the project, outlining the project objectives, requirements, and constraints. It defines the project requirements in detail, including the functional and non-functional requirements. This document will serve as a reference document throughout the project, ensuring that everyone on the project team is aware of the project objectives, requirements, and constraints. It provides a common language and framework for communicating about the project to make it easier for project team members to communicate with each other and with stakeholders.

Scope of Work

This document outlines the Scope of Work for the development and implementation of an e-commerce system for our organization. The proposed system will leverage Cegid for OmniChannel, NextJS front-end website with BigCommerce as e-commerce back-end, Flow OMS for order management, Stamped.io for product reviews, Tamara, Tabby and VALU as BNPL providers, Checkout.com as card payment provider, Bloomreach Content CMS for content management and Bloomreach Discovery for Engagement and Searchandizing. The system is intended to provide an integrated platform for online sales and marketing to help drive business growth.

The following tasks will be undertaken as part of the implementation of the e-commerce system:

  1. System Architecture Design: A detailed architecture design will be developed, outlining the various components of the e-commerce system and how they will integrate with each other.

  2. System Implementation: The e-commerce system will be implemented based on the system architecture design. The NextJS front-end website with BigCommerce as e-commerce back-end will be developed, and the Bloomreach Content CMS and Bloomreach Discovery for Engagement and Searchandizing will be set up.

  3. Integration with Third-Party Services: The various third-party services, including Cegid for OmniChannel, Flow OMS, Tamara, Tabby and VALU BNPL, and Checkout.com payment gateway, will be integrated with the e-commerce system.

  4. Data Migration: All relevant data, including product data, customer data, and order data, will be migrated from the existing system to the new e-commerce system.

  5. Testing and Quality Assurance: The e-commerce system will undergo rigorous testing and quality assurance to ensure that it is bug-free and functioning as intended.

  6. Training and Support: Once the e-commerce system is fully implemented, training will be provided to L’azurde staff on how to use the system effectively. Ongoing support will also be provided to ensure that any issues are quickly resolved.

 

Functional Requirements

General Requirements

Multi-Client and Multi-Region Website

The system requires an ability for the user to browse and place orders based on the region/brand they are on, and generate an invoice accordingly. The acceptance criteria include:

  • Display of product taxonomy and invoice details based on the client and region selected

  • Ability to generate invoices based on the client's legal entities and terms of invoicing

  • Display of product pricing based on taxes, such as UAE VAT (5%), Egypt VAT (14%), and KSA VAT (15%)

  • Calculation of tax based on a formula provided

  • Invoices to be based on the client's subsidiaries and legal terms in KSA, Egypt, and UAE

  • Redirection of the user to the appropriate region website based on their Geo and IP location

  • Redirection links to have two versions, English and Arabic

  • Different invoicing terms for different regions/brands, such as L’azurde KSA and L’azurde Egypt

  • Note that cross border deliveries will require HS codes for customs.

 

Implementation Details

NextJS storefront to follow sub-path (folder-structure based) routing, FE logic to be implemented for redirection. Tax-inclusive pricing to be configured on “Taxes and duties“ section in NextJS store settings.
Invoice generation details to be added by OMS team.[TBD] @Bilal Javed (Unlicensed)

Region Based VAT Tax (Multi-Tax)

The system requires the ability to charge tax to the user on their shopping based on the region selected, and for their invoice to reflect the tax of the region they shopped on. The acceptance criteria include:

  • Display of VAT details at the time of checkout, including subtotal, estimated shipping & handling, VAT tax, and total to pay

  • Ability to charge VAT on the invoice based on the store country selected

  • Display of the total price customers will pay on the product pages without adding a % for tax at checkout/basket

  • Display of the price minus the VAT on the basket and beyond, along with a line item showing the tax amount based on the % below:

  • UAE VAT (5%), Egypt VAT (14%), and KSA VAT (15%)

  • Formula for tax calculation: Assume tax is 15% and selling price is 2450. Cost X = (2450100)/115 = 2130.43 (i.e., Z100/Y)

 

Tax-inclusive pricing to be configured in “Taxes“ section for each store in BigCommerce store settings.

Implementation Details

Store Tax Setup - Tax overview

In Bigcommerce, tax details will be setup through each stores dashboard. - Manual tax setup

  • Under ‘Store tax settings’, select option to have prices inclusive of tax.

  • Create a tax zone to apply tax globally or per country. One default global zone will already be created for store. L`azurde will only require one zone per store.

  • Create tax classes to apply different amounts taxes within a zone. Four classes are created by default. L`azurde will only require one class per zone.

  • Add tax rates within tax zone. Each class within each zone can have its own tax amount. L`azurde will only require one tax amount per store.

  • When creating/importing products in Bigcommerce PIM, assign appropriate tax class to product. Price will be adjusted accordingly, dependent on whether tax is set to be inclusive or exclusive of price.

If required Bigcommerce also provides REST APIs to manage taxes. https://developer.bigcommerce.com/docs/rest-management/tax-rates-and-zones/tax-zones#get-tax-zones

 

QR Code for Electronic invoices

The system requires the ability to get a QR code generated for an order and be able to view electronic invoice for that order by scanning the QR code.

  • Ability to receive a QR Code in their email inbox when they place an order or on the invoice receipt generated by the POS

  • Ability to view invoice information via QR Code scan

  • QR Code Integration needs to done on all the Electronic invoices across all the merchants in KSA

 

Implementation Details

For KSA, electronic invoices require a QR code.

Implementation overview:

  • Create a TLV QR code (Tag-Length-Value)

  • Convert TLV to base64

  • Convert base64 data string to QR code using third party library - cheprasov/js-qrcode

For details on KSA QR creation with zatca requirements, see https://zatca.gov.sa/ar/E-Invoicing/SystemsDevelopers/Documents/QRCodeCreation.pdf

Multi-Pricing and Multi-Currency

The system requires the ability to see product pricing and currency based on the store region selected

  • Ability for the website to show pricing based on the country selected .e.g. KSA store may have different pricing than an Egypt store

  • Pricing for the region to be configured on PIM

  • Ability to show currency based on the country selected:

    • UAE: AED

    • KSA: SAR

    • EGYPT: EGP

 

Implementation Details

Currency change will be handled on the frontend. On region change, country based currency will be stored on the frontend and used within relevant flows and APIs. Some Bigcommerce APIs will also return the correct currency e.g. cart APIs.

Multi-Lingual

The system requires the ability to change the language on the website

  • Ability to change the website’s language between: English and Arabic

  • Each region will have two versions of the website

  • Ability to show language selector banner to first time users. On selecting language, cookie will be stored with selected options.

  • Ability to have the content in Arabic for the following components

    • Website Content: Branding/Menu/Pages

    • Product Information Management

    • Product Listing Pages

    • Pricing

      • Numbers to be in Western Format

      • Currency to be displayed in Arabic

    • Reviews

    • Checkout

 

Implementation Details

Language change will be handled on the frontend. On language change, proper language-region based locale will be stored on frontend and used through the site and within relevant APIs e.g. en-sa, ar-sa

This locale will also we updated in the site URL e.g. lazurde.com/en-sa/.

Site layout/designs will shift accordingly. Right-to-left for Arabic, Left-to-right for English.

Multiple Fonts

The system requires the ability to support English and Arabic fonts on the website

  • Ability for the website to accommodate both English and Arabic

  • Ability to have text alignment for fonts and language

    • English - Left to Right Alignment

    • Arabic - Right to Left Alignment

    • Currency to be aligned as per the language selected.

 

Implementation Details

Font change will be handled on the frontend. On language change, correct font will used for selected language; Roboto for English, Cairo for Arabic

Site layout/designs will shift accordingly. Right-to-left for Arabic, Left-to-right for English.

Multi-Frontend

The system requires the ability to navigate between different brands on the website and shop according to the selected brand

  • Ability to switch between different brands from any website.

  • On both desktop and mobile, brands can be switched from ‘Shop By Boutique’ section.

  • Websites which may or may not fall under the same domain. Each website will have its own look and feel in terms of UI, however, UX will be the same.

  • In case a user enters www.lazurde.com, the user to be redirected to the appropriate region website based on user’s Geo and IP location. Domains will be as following:

    • UAE - www.lazurde.com/en-ae

    • KSA - www.lazurde.com/en-sa

    • EGP - www.lazurde.com/en-eg

 

Implementation Details

Brand navigation will be handled on the frontend. On changing brand, appropriate and brand relevant information will be fetched from APIs and site will be updated.
Site URL will be updated as follows:

L'azurde - www.lazude.com/en-sa

MissL' - www.lazurde.com/en-sa/missl

Waves - www.lazurde.com/en-sa/waves

Frontend - L`azurde

The system requires the ability to browse or shop all brands products on the L’azurde website without switching any brand website.

  • Ability to view all the brands products in the Explore All section of the Website and be able to filter products by other brands as well through the Brands filter

  • Ability for the main L’azurde website to have all brands available on their website whether they have their own website or not.

    • L’azurde’s product listing pages(PLPs) will have all the products from brands under their umbrella as in Waves Jewelry and Miss L'.

    • However, L’azurde products will not be available on Waves and on Miss L'.

 

Implementation Details

Products will be fetched through Bloomreach Discovery. This includes product filtering and sorting. For complete details, refer to Technical Requirements Document - Phase 1 | Bloomreach Searchandizing

Responsive Design

The system requires the ability to browse the website on different device platforms.

  • User to be shown the website based on their device. At least 3 breakpoints (desktop, tablet, mobile) supporting Chrome, Safari, Edge, Firefox & Opera are required.

  • Ability for the website to have mobile first responsive design approach.

Environments - Dev/QA/Staging/Production

The system requires the following:

  • Dev - An environment with a server workspace for developers to make changes without breaking anything in a live environment.

  • QA - An environment with a server with master data (or master data regularly updated) for QA testing

  • UAT/Staging - An environment for feature testing with sample data that needs to be Prod like

  • Production - An environment with a server to go live.

 

Implementation Details

NextJS storefront to have 4 environments, each env to be connected to respective BigCommerce store. Bloomreach Content and Discovery to have 2 environments, staging and production.

Staging env to be connected to all lower environments. Production env to be connected to production BigCommerce and Production Bloomreach Content and Discovery environments. For Plytix PIM, separate channels to be created for connecting with dev, qa and uat environments on BigCommerce stores.

Uptime

The system requires the following ability for Uptime:

  • An Uptime (99.99%)

  • Response time SLA Dashboard including Reporting & alerts

 

Implementation Details

Up time to be ensured by Vercel hosting platform. Website reporting and analytics to be provided by Vercel.

 

Backend User Management

The system requires the following ability to manage user access and is able to create users and assign roles and permissions

  • Ability for Employees/Backend User to register into the system with user authentication process for both.

  • Ability to create/read/update/delete users of the system in the Control panel. Key requirements:

    • Ability to create a Role

      • Standard Roles

      • Custom Roles

    • Ability to Create a user

    • Ability to View a user

    • Ability to update user details

    • Ability to delete user

    • Ability to assign role to a user

    • Ability to define access control for a user on different modules

 

Implementation Details

Back-end user management for BigCommerce to be done from Account Settings > Users section from store dashboard. User management for Bloomreach Content and Discovery to be done from Identity and Access Management (IAM) dashboard by L’azurde team. Only L’azurde team has access to IAM. User management for Plytix is also to be managed by L’azurde themselves as only they have the admin access to Plytix PIM.

 

Audit Trail & Logging / Change History

The system requires the ability to view Audit Trail log and Change history and to report on them.

  • Ability to store change log in the system log based on the following but not limited to:

    • Order changes

    • Product Catalog changes

    • Inventory changes

    • CMS changes

    • Returns changes

    • User management changes

    • Promotion changes

 

Implementation Details

BigCommerce store logs to be access from Settings > Store Logs. Bloomreach Content CMS logs to be accessed via Activity Stream on Bloomreach Content. Searchandizing logs and analytics to be accessed via Insights app on Bloomreach Discovery dashboard.

Localization & Time zones

The system requires the ability to operate websites based on user location so that, promotions and orders are aligned according to user time zone.

  • Promotions to be set and run based on the Country time zone.

  • Invoicing to be done based on the time zone of the Country ordered.

 

Implementation Details

Each store to have timezone of its respective country, promotions will be according to that timezone.

@Bilal Javed (Unlicensed) to add invoicing details. [TBD]

 

Analytics

The Admin/User requires the ability to Dashboard view for BI analytics based on metrics.

  • The user requires the ability to pull all the information from the systems mentioned below and store it in a data lake (Data warehouse).

  • The user requires the ability to customize the view through Headers and Filters.

  • The user requires the ability to export information based on date ranges

  • Reporting metrics to be done with system and Data Warehouse

  • Metrics

    • Order Number

    • Invoice Number

    • Sku ID

    • Store ID

    • Employee ID

    • Date

    • Time

    • Brand

    • Collection

    • Listed Price

    • Selling Price

    • Items Cost

    • Main Category

    • Type

    • Metal Type

    • Metal Karal Only

    • Metal Color Only

    • Diamond

    • Diamond Carat

    • Diamond Shape

    • Stone

    • Stone Carat

    • Stone Color

    • Stone Shape

    • Payment Method

    • Delivery Method

    • Repeat Customer

    • Single Channel/Cross Channel

    • Customer Purchases

    • Customer ID

    • Order Status

    • Promo Code Value

    • Date Processed

    • Date Shipped

    • Date Delivered

    • Mobile / PC / Tablet

    • Fulfillment Location

    • Discontinued

    • Returned

    • Returned Reason Code

    • Cancellation

    • Cancellation Reason Code

    • Country

    • Governate

    • City

    • Area within city

 

Implementation Details

BI team to add details

 

Supports Report Delivery Format

The Admin/User requires the ability to export/import reports to create custom reports.

Formats

  • PDF

  • CSV

  • XLS

 

Implementation Details

BI team to add details

Reports By Channel / Site

The system requires an ability to provide reports.

An ability to provide reports for Channel/Site (Reporting By Side).

  • Report By Country

  • Report By Brand

 

Implementation Details

BI team to add details

Standard Operational Reports

The system requires an ability to generate operations reports by selecting key operational metrics and KPIs.

  • Common Examples:

  • Inventory Reports

  • Ageing SKUs Reports

  • SLA reports

  • Inventory Ageing Reports

 

Implementation Details

BI team to add details


Order Analysis

The system requires an ability to generate order analysis reports by selecting key order and sales metrics.

  • Orders by state

  • Orders by Site

  • Orders by Country

  • Sales report by Orders

 

Implementation Details

BI team to add details

 

Customer Analysis

The system requires the ability to generate customer analysis reports by selecting key customer metrics or KPIs.

  • Recently Joined Customers

  • Converted Customers

  • Customers by Location

  • Customer Lifetime Value

  • Customer Detail

  • Customer Reports based on RFM

 

Implementation Details

BI team to add details

 

Catalog & Product Reports

The system requires an ability to generate reports based on catalog and product metrics.

  • Best Selling Products

  • Frequently Bought Together

  • Least bough product

  • Product trend

 

Implementation Details

BI team to add details

Business Performance Reporting 

The system requires the ability to generate Sales reports by selecting key sales metrics and KPIs.

  • Sales report by Orders

  • Sales report by Items

  • Sales report by time

  • Sales reports by area

  • Monthly Recurring Revenue

  • Bounce Rate

  • Churn Rate

 

Implementation Details

BI team to add details

Tab Navigation

The system requires the ability to provide tab navigation on the website for accessibility.

  • Ability to use tab navigation, navigate through site without using mouse for people with disability

 

Implementation Details

This requires implementing keyboard accessibility features.

For tab navigation, the HTML tag attribute tabindex is used to determine correct order of component selection when using tabs. Elements must have focus styling to highlight selected element.

For further details, refer to Keyboard accessible - Accessibility | MDN

Customer Account Management

The system requires the ability for the user create and manage their account and addresses and log in/log out during various flows. The acceptance criteria include:

  • The user to be able to have a Unified Account system on the L’azurde Website Users will have separate account for each region/expansion store.

  • Ability to create an account through sidebar, buttons and links.

  • Ability to create an account before ordering

  • Ability to create an account during ordering on checkout page

  • Display error messages on account creation failure

  • Ability to verify account creation through OTP (not part of scope)

  • Ability to verify account creation through email

  • Ability for the Verification code or links to expire (not part of scope)

  • Ability to update profile information on the “My Account” section

  • Ability to update communication preferences

  • Ability to login into an account on the website while browsing

  • Ability to login into an account (If browsing as guest user) on the checkout page

  • Ability to get error messages if there’s a login failure

  • Ability to stay logged in until session expires

  • Ability to login through Social Logins (not part of scope)

  • Ability to log out of the website

  • Ability to reset password

  • Ability to update account/user information

  • Ability to Add/Update Payment methods (not supported for third party payment methods in BigCommerce)

  • Ability to manage addresses

  • Ability to opt-in/opt-out of marketing notifications

  • Ability to view Order details in account section

  • Ability to request for Order Cancellation

  • Ability to provide reviews and ratings for orders

  • Ability to deactivate user account

  • Ability to link social profile to user account (not part of scope)

  • Ability to navigate through different sections on “My Account” Dashboard with convenience to go back to a previous page or section

 

Implementation Details

For details on implementing Customer Account Management APIs, refer to the Identity section.

Website Home Page

Navigation

The system requires an ability for the website to user to be able to to browse the L’azurde Homepage and navigate to different elements.

  • User lands on the L’azurde website homepage when entering http://lazurde.com

  • User is redirected to region website based on Geo and IP location when entering http://lazurde.com

  • Redirection links to regional websites have two versions: English and Arabic

  • User can directly access different brand homepages with respective URLs

  • User can navigate to other brands through "Shop by Boutique" section on desktop and mobile web (Section Removed By Client)

  • Website switches to the selected brand version upon selection

  • "Back to L’azurde" option appears when user switches to a brand other than L’azurde

  • User can navigate to different sections and pages through the homepage, including key listing pages, categories, website static pages, and different brands under L’azurde.

 

Implementation Details

Navigation menus for each brand and region to be created on Bloomreach Content CMS. Navigation links to be set up in the navigation menus components created on Bloomreach Content. Storefront to create and display navigation elements by fetch navigation menu content via Bloomreach Content SDK. Following component rendering pattern to be followed for displaying navigation menu components,

import LazurdeNavigation from "./components/LazurdeNavigation"; return <BrPage mapping={{ "Lazurde Navigation": LazurdeNavigation }} />;

For more details about creating Navigation components on Bloomreach Content, refer to the Bloomreach Content - CMS section.

 

Store Elements on Home Page

The system requirs the ability to configure homepage elements that a user can browse through on a website in order to view different collections and place orders. These elements include:

  • Brand title and promotional bar

  • Language and region bar

  • Top menu bar with options to shop by boutique, store locator, my account, wishlist, cart, and more

  • Category bar with options such as jewelry, diamonds, bridal, gifts, and live events

  • Search bar

  • Hero section with imagery and a call to action (CTA) to a particular listing page

  • What's trending section with trending products displayed horizontally and a CTA to shop all

  • Live selling section with live selling sessions displayed horizontally and CTAs to book appointments or see live products

  • What's new section with the latest products displayed horizontally and a CTA to shop all

  • Shop by category section with product categories listed horizontally and a slider to navigate them

  • Best sellers section with the best selling products displayed horizontally and a CTA to shop all

  • Explore section with options to explore L'azurde exclusive items or L'azurde brands listed horizontally

  • Shop our Instagram section with L'azurde or other brands content on Instagram and CTAs to like on Facebook or follow on Instagram

  • Website footer with options to sign up or sign in, social platform links, customer service section, L'azurde world section, language and region selection, and payment options references

Note that the website header and footer do not appear in the checkout flow, and the category bar and horizontal sliding of each section are adjusted for the mobile version.

 

Implementation Details

Brand titles/logos, Promotional Bar, Category Bar, Explore Section, Website Footer, Shop by category and Hero Section to be configured in Bloomreach Content as components and displayed on storefront via Bloomreach Content SDK,

<BrPage configuration={{ path: `${window.location.pathname}${window.location.search}`, endpoint: 'https://kenan.bloomreach.io/delivery/site/v1/channels/getting-started/pages', httpClient: axios }} mapping={{ PromotionalBarComponent }}>

What’s Trending, What’s New and Best Sellers sections to be implemented as part of Engagement Module implementation by Voxwise team. (NOTE: Details to be added after discussion with Voxwise team. [TBD])

Live selling section to be implemented within the NextJS headless storefront using Bambuser Live Video Shopping platform. For enabling Bambuser live video selling on the home page, following snipped to be added to Home Page,

<button id="YOUR_ELEMENT_ID_HERE">Join show now</button> <script> (function() { if (!window.initBambuserLiveShopping) { window.initBambuserLiveShopping = function(item) { window.initBambuserLiveShopping.queue.push(item) }; window.initBambuserLiveShopping.queue = []; var scriptNode = document.createElement('script'); scriptNode['src'] = 'https://lcx-embed.bambuser.com/your-brand/embed.js'; document.body.appendChild(scriptNode); } window.initBambuserLiveShopping({ showId: 'SHOW_ID_HERE', node: document.getElementById('YOUR_ELEMENT_ID_HERE'), type: 'overlay', }); })(); </script>

For detailed reference, visit Bambuser docs.

Instagram section to be implemented by using following Meta’s Instagram graph APIs,

#GET_ACCESS_TOKEN `https://api.instagram.com/oauth/access_token` #GET_LONGLIVED_ACCESS_TOKEN `https://graph.instagram.com/access_token?grant_type=ig_exchange_token&client_secret=${clientSecret}&access_token=${token}` #FETCH_INSTAGRAM_POSTS `https://graph.instagram.com/me/media?fields=${fields}&access_token=${token}`, #FETCH_SINGLE_POST `https://graph.instagram.com/${postId}?fields=${fields}&access_token=${token}`,

For detailed reference, visit Instagram Graph API docs.

Language and Region Selector to be implemented within NextJS headless storefront as a static part of Navigation React Component.

 

Categories

The system requires the ability for the user to navigate through the Product Categories, so that he can browse products by Categories and place an order.

  • The user should be able to navigate to the Product Categories from the Website Homepage through the Category Bar.

  • On the Homepage, the Category Bar should have the following categories: New In, Jewelry, Diamonds, Bridal, and Gifts.

  • On the Live Page (mobile version), the Categories should be featured on the Burger Menu.

  • The Category Bar should have a collapsed view by default, which the user can expand.

  • On Desktop version:

    • The Category bar should expand on hover to any of the Category titles mentioned above.

    • If a user clicks on the Category title, they should be taken to the selected Category.

    • Mouse hover out should close the Category Bar.

  • On the Mobile Version:

    • On tapping a category in the Burger Menu, it should be expanded and a back button would appear on the top to go back.

  • The expanded view should show Category details as follows:

    • Shop by Category

    • Necklaces & Pendants - On click, User will be taken to Necklaces and Pendants listing page.

    • Rings - On click, User will be taken to Rings listing page.

    • Bracelets & Anklets - On click, User will be taken to Bracelets and Anklets listing page.

    • Earrings - On click, User will be taken to Earrings listing page.

    • Jewelry Sets - On click, User will be taken to Jewelry Sets listing page.

    • Explore All Categories - On click, user will be taken to the All categories Product listing page.

    • Curated Shops

      • Best Sellers - On click, user will be taken to the Best Sellers listing page.

      • New In! - On click, user will be taken to the New In! listing page.

      • Online Exclusives - On click, user will be taken to the Online Exclusives Product listing page.

      • Last Chance! - On click, user will be taken to the Last Chance! Product listing page.

    • Shop by Gold

      • Gold Jewelry - On click, user will be taken to the Gold Jewelry Product listing page.

      • Rose Gold Jewelry - On click, user will be taken to the Rose Gold Jewelry Product listing page.

      • White Gold Jewelry - On click, user will be taken to the White Gold Jewelry Product listing page.

    • Shop by Gemstone

      • Diamonds - On click, user will be taken to the Diamonds Product listing page.

      • Ruby - On click, user will be taken to the Ruby Product listing page.

      • Sapphire - On click, user will be taken to the Sapphire Product listing page.

      • Pearls - On click, user will be taken to the Pearls Product listing page.

      • Cubic Zirconia - On click, user will be taken to the Cubic Zirconia Product listing page.

      • Colored Stone - On click, user will be taken to the Colored Stone Product listing page.

    • Collections & Collabs

      • Miss L’ X Lady Fozaza - On click, user will be taken to the Miss L’ X Lady Fozaza listing page.

      • My Gold Sign - On click, user will be taken to the My Gold Sign listing page.

      • My World - On click, user will be taken to the My World listing page.

      • SuperMiss L’ - On click, user will be taken to the SuperMiss L’ listing page.

      • My Gold Roots - On click, user will be taken to the My Gold Roots listing page.

      • So In Love - On click

 

Implementation Details

Category Bar component to be created on Bloomreach Content CMS and implemented on Storefront via Bloomreach Content SDK.

import CategoryBar from "./components/CategoryBar"; return <BrPage mapping={{ "Category Bar": Category Bar }} />;

 

New In and Sales offer

The system requires the ability for the user to have access to New In and Sales offers on the website homepage to browse and place orders.

  • The user should be able to browse New In Products and Sales offers via the Category bar.

  • The Main navigation should include a New In category showing links to new products under each subcategory.

  • The Main navigation should also include a Sale category showing links to products on sale under each subcategory.

 

Implementation Details

New In and Sales offers navigation components to be created as part of Category Bar component on Bloomreach Content CMS. The PLP pages for these offers to be created on Bloomreach CMS as well. PLP page content to be fetched via Bloomreach Product Search API. Products that are to be included in these offers MUST have New In and appropriate sales offer tags. For example, a Black Friday sale product should have “Black Friday“ in “Occasions and Campaigns“ list attribute on Plytix PIM.

 

Seasonal Campaign Banner on HomePage

The system requires the capability for the User to see seasonal campaigns on the website to browse and place orders.

  • The user should be able to see Seasonal Campaign information on the Hero section.

  • Clicking on the Seasonal Campaign information should take the user to the campaign listing page.

  • The user should also be able to see Seasonal Campaign information on the Top Bar.

  • Clicking on the Seasonal Campaign information on the Top Bar should take the user to the campaign listing page.

  • The Banner should be displayed according to the design for each brand and screen size.


Implementation Details

Hero Banner component to be created on Bloomreach Content CMS as per guidelines mentioned in the Bloomreach Content - CMS section.

 

Website Dynamic Pages

Category Page

The system requires the capability for the User to be able to browse products via categories and place an order.

  • The user should be able to go to the Category page through the Expanded view of the Category Bar.

  • On the Category bar, the user can go to different category pages by clicking on an option in the Shop by Category section.

  • Clicking on a category should take the user to the Category page and list all the products under the selected category.

  • Clicking on a product on the Category page should take the user to the Product detail page.

  • Clicking on Explore All Categories option on the Shop by Category section should take the user to the Shop All page instead of a category page.

  • The Shop All page should display products of all categories.

  • Category information and Product Information should be coming from PIM.

 

Implementation Details

The category page for each of the categories to be created on Bloomreach Content CMS as per guidelines mentioned in the Bloomreach Content - CMS section. The category page to have a Category Header component which will capture category name, optional description and an optional category banner. For Shop All page, Category Cards component will be used as a category page header instead of a category banner. Category PLP page content to be fetched via Bloomreach Product Search API.

 

Campaign Page

The systen requires the capability for the user to be able to browse products via Campaigns and place an order.

  • The user should be able to go to the Campaign page through Promotional Banners on the Website.

  • The user should be able to go to the Campaign page through Hero Content on the Website.

  • The user should be able to go to the Campaign page through Trending sections on the Website.

  • The user should be able to go to the Campaign page through Campaigns listed on the Category bar.

  • Clicking on a Campaign should take the user to the Campaign page and display products related to the Campaign.

 

Implementation Details

The Campaign Page to be created on Bloomreach Content CMS as per guidelines mentioned in the Bloomreach Content - CMS section. The Campaign PLP page content to be fetched via Bloomreach Product Search API. Products that are to be included in these offers MUST have appropriate sales offer tags. For example, a Black Friday sale product should have “Black Friday“ in “Occasions and Campaigns“ list attribute on Plytix PIM.

 

Store List

As a user, I want to access a Store Locator page to view the list of stores and navigate to them.

Acceptance Criteria:

  • The store locator link should be available on the Top Bar and Footer of the homepage.

  • On clicking the link, the user should be directed to the Store Locator page.

  • The Store Locator page for L'azurde should display stores for all brands, while other brands should show only their respective stores.

  • The store locator page should include the following details:

    • List of stores for L'azurde, Miss L', Kenaz, InStyle Distributors, and L'azurde Distributors.

    • Search by Address field, My Current location on GPS button, and a search button.

    • The store list should show store title, address, distance from the user's location in miles, and a Google Maps icon with a Select CTA.

    • On selecting the store, the Google map view should appear next to the store list, and the store details section should appear under the map view.

    • The store details section should display the store address, contact information, opening hours, and a 'Close' button.

  • On mobile, the store titles should be scroll-able vertically.

 

Implementation Details

Store locations to be created by Flow OMS via BigCommerce Location APIs. Storefront to fetch store locations via BigCommerce Location APIs and display them on Google Maps.
Location APIs - BigCommerce Dev Center

Google Maps Integration

For React/NextJS frontend integration, we will use the third party package npm: @react-google-maps/api. @react-google-maps/api includes map components and custom hooks to integrate google maps within a react app.

We will use latitude/longitude details provided by the location APIs to add store markers on the integrated Google map.

If required, further store details can be fetched directly from Google Map Service APIs - https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse https://developers.google.com/maps/documentation/javascript/examples/place-details

NOTE: Googles map services/APIs are not free. Each service/API has its own usage and billing criteria. Google provides a monthly credit of $200. Any usage charges above this amount will have to be paid.
For usage and billing details, refer to https://developers.google.com/maps/documentation/places/web-service/usage-and-billing https://developers.google.com/maps/documentation/geocoding/usage-and-billing Platform Pricing & API Costs - Google Maps Platform

 

FAQ Pages

The system requires the ability for the Admin to configure FAQ pages and link them to the website.

  • Admin can access FAQ Pages at control panel

  • Display FAQ link on the webpage

  • Ability to navigate to the FAQ pages

  • Ability to create, update, and delete FAQ and help pages

  • Ability to add imagery, audio, video, and media content to the FAQ and help pages

  • Setup SEO URLs and meta tags for FAQ and help pages.

 

Implementation Details

The FAQ Pages to be created on Bloomreach Content CMS as per guidelines mentioned in the Bloomreach Content - CMS section. SEO information for FAQ pages to be added via Bloomreach Page SEO section. Imagery and other FAQ page content to be added via reusable FAQ components from Bloomreach CMS.

 

Collections Management

The system requires the ability for the Admin to configure and manage collections to make them live on the website.

  • Admin can manage collections in the control panel

  • Ability to create and manage collections

  • Ability to group products for marketing purposes

  • Ability to define collection details for each level: Brand/Country Site/Channel

  • Ability to define collection name, slug, and imagery (banners)

  • Ability to assign products to the collection

  • Ability to configure T&C, start date, and end date

  • Ability to configure landing pages with templates for new collection launches and promotion periods.

 

Implementation Details

The product collection to be specified in “Collection” attribute in Plytix PIM. Collection Pages / PLPs to be created on Bloomreach Content CMS as per guidelines mentioned in the Bloomreach Content - CMS section. Collection slug, name, banners, T&C, start date (UTC) and end date (UTC) to be specified as part of Collection component on Bloomreach CMS. If the end date is reached and collection page has not been removed/disabled from CMS, user to be redirected elsewhere. Strict front-end checks to applied to ensure users are not allowed to buy collection products after the collection has expired.

 

Website Static Pages

Landing Page Management - General

The system requires the ability for an Admin to configure static landing pages on the website for user navigation.

  • Admin can manage static pages on the website

  • Ability to create, update, and delete static content pages (e.g. T&C/Privacy Policy)

  • Ability to add imagery, audio, video, and media content into the static content pages

  • Ability to setup SEO URLs and meta tags for static content pages

  • Static page should be in accordance with the provided UI designs

 

Implementation Details

Static pages to be created on Bloomreach Content CMS as per guidelines mentioned in the Bloomreach Content - CMS section. Reusable components to be created for T&C and Privacy Policy pages on CMS with options for adding text content and imagery. SEO information for Static Pages to be added via Bloomreach Page SEO section.

 

Show Breadcrumb Navigation on Static Pages

The system needs to show breadcrumb navigation on static pages for easy navigation.

  • User can have breadcrumb navigation for static pages

  • Breadcrumb navigation should be shown on static pages to make navigation easier for the user

 

Implementation Details

[No Designs - NOT part of phase 1 - TBD]

 

Error Handling

The system needs to show error pages to the user in case of errors on the website.

  • User should be shown error pages in case of errors on the website

  • 404 landing page should be shown in case of unavailable pages, page doesn't exist or access failure, with the following information:

    • Error message: "Whoops, our bad :(\nThe content you requested was not found."

    • CTA to Go Back to the previous page (On click, user to be taken back to the previous page they were browsing)

    • CTA to Store Home (User to be taken to the Store Homepage)

    • CTA to My Account (User to be taken to the My Account dashboard)

  • Error page should be shown to handle generic technical errors (Microservice down, etc.)

  • Outage page should be shown during outages

  • Traffic should be redirected to this page during technical maintenance, system upgrades, and release in progress.

 

Implementation Details

Error page UI to be created as per Figma UI designs. Error page to be created within NextJS codebase, no content will be fetched from CMS.
[No error page for generic errors is available in designs, no outage page is available in designs]

 

Lazurde Static Pages (About Us, Contact Form, L’azurde Policies, Customer Service, Governance and Investor Relations)

The system requires the ability for the User to browse Help pages on the Website for L’azurde products.

  • About Us: details about L’azurde and their business.

  • Contact Form: information to contact L’azurde stores.

  • L’azurde Policies: terms and conditions of L’azurde.

  • Order & Returns: a static page related to order and returns.

  • Customer Service: information about effective communication between the company and investors.

  • Governance and Investor Relations: pages and stock information coming from Euroland.

 

Implementation Details

Static pages to be created as per Figma Designs. Each page to be created in Bloomreach Content CMS via reusable components. Following reusable components to be created,

About Us: Banner (Optional Text), 2 Column Layout (Text and Image), 3 Column Layout (Image, Text and Image), Our Heritage Calendar, Best Sellers (CDXP)
Contact Form: Banner (Optional Text), Contact Us Grid
L’azurde Policies: Vertical Text (Headings) List, Policy Text Section (Vertical 2 Section Layout)
Customer Service: Banner (Optional Text and Search Input), Help Center Grid
Governance and Investor Relations: Vertical Text (Headings) List, Section Header and Details (Vertical 2 Section Layout)
Celebrities Choice: Banner (Optional Text), Celebrity Image Cards, Two Column Layout (Text Sections with CTA), Best Sellers (CDXP)
In the Press: Banner (Optional Text), Cards Grid, Best Sellers (CDXP)

For a step by step guide for creating ancillary page components, refer to Ancillary Pages section.

 

Custom Pages

The system requires the ability for the Admin to create custom static pages based on templates to publish marketing pages accordingly.

  • Admin should be able to create static custom pages on the website.

  • Pages should be generic static pages based on a template for marketing purposes.

  • An example of a page could be a Lab Grown Diamond educational page.

 

Implementation Details

Reusable components to be created on Bloomreach Content CMS as per Figma Designs. These components will be available for creating other custom pages that are not available in Figma Designs. The components to be created as per the guide lines in Page Creation Guide section.

 

Global Search

Search Preview Section

The website should show a search preview so that user can search for products and add them to the cart.

  • User can perform a search using the search bar in the Category bar.

  • Clicking on the Search icon triggers a search preview bar with specific components.

  • When the Search field is blank, the search preview should display Popular Search Terms and Popular Searched Products.

  • Popular Searched Products include Product Image, Product Title, and Product Price.

  • Popular products are based on Products, Categories, and Promotions.

  • Bloomreach provides information for Popular Search Terms and Searched Products.

  • As the user types in the Search field, the search preview dynamically displays products matching the typed query.

  • Auto-correction feature corrects misspelled words in the search bar.

  • "Did you mean?" suggestions are shown while the user is typing.

  • User can initiate the search by hitting enter or clicking on the search button.

  • Search recommendations are provided by Bloomreach.

 

Implementation Details

Search preview and suggestions to be implemented via Bloomreach Autosuggest API. Please note that there are no designs available for this requirement.

https://staging-suggest.dxpapi.com/api/v2/suggest/?
GET https://suggest.dxpapi.com/api/v2/suggest/? account_id=<Bloomreach Provided Account ID> &auth_key=jazzhands &request_id=7546919099987 &catalog_views=my_product_catalog:store1|recipe:daily &_br_uid_2=uid%3D5917073780329%3A_uid%3D9737480431795%3Av%3D11.8%3Ats%3D1459840113832%3Ahc%3D37 &url=www.example.com &ref_url=http://www.example.com/ &q=sa &request_type=suggest #Value must be suggest for Autosuggest API

For more details, refer to Autosuggest API docs.

 

Search Results Page

The user should be able to see search results when they perform a search so that he can view desired products and add them to the cart.

  • The search result page should display the following details:

    • Results Found: "We found 'number' results for 'Search Keyword'"

      • 'Search Keyword' represents the user-entered search value.

      • 'number' is the count of products returned based on the search.

  • Users can filter search results using tabs for Brand, Category, Type, Metal, Gemstone, Price, and Collection.

  • On the mobile version, the filter selection appears in a dropdown.

  • Users can sort the search results using a dropdown with options for New (Default), Best Sellers, Biggest Saving, Most Viewed, Price: low to high, Price: high to low, and Relevance.

  • A bar shows the number of results being shown per page.

  • The "View All" CTA allows users to see all search results on a separate page.

  • The search result list includes product thumbnails, names, and prices.

  • Page change buttons enable navigation with options for Previous Page '<', Current Page 'Current Number/Total Number', and Next Page '>'.

  • If the search returns no results, display the message: "We found '0' results for 'Search Keyword'" and provide assistance options such as contacting customer service.

  • The "You might also like" section shows a product carousel with recommended products including thumbnails, names, and prices. Recommendations are provided by Bloomreach.

  • The "Customers also Bought" section displays product thumbnails, names, and prices. Recommendations are provided by Bloomreach.

  • Define relevance criteria for search, including Brand, Category, Type, Metal, Gemstone, Price, and Collection.

  • Implement breadcrumb navigation for search results: Homepage -> Search Results.

 

Implementation Details

The search results page to be created on Bloomreach Content CMS. Page UI to be designed as per Figma Designs. Product Search API to be used for fetching search results on search results page. Refer to Product Search API docs for endpoint and payload details.

 

Configuring Search Settings

The system requires the ability for the Admin to configure search settings to ensure accurate search results for users. The admin should be able to

  • Define sorting rules for search results

  • Define sequencing rules for search results

  • Enable direct navigation to the Product detail page for exact match results

  • Assign landing pages to specific search terms

  • Provide synonym suggestions for search queries

  • Configure alternate products per keyword and per product

  • Show alternate products when the configured product is unavailable

  • Display phrase suggestions for alternative product searches

  • Configure search groups for search settings.

 

Implementation Details

For defining sorting, sequencing and ranking rules refer to the Bloomreach Facet Management docs. For search personalization, refer to the Search Personlization docs.

 

Detailed Search Analytics

The system requires the ability for the admin to have detailed search analytics in the system so that he can obtain reports on search analytics. The admin should be able to

  • Access detailed search analytics and reporting

  • Include or exclude specific products or pages from search analytics

  • Obtain search analytics data from Bloomreach.

Implementation Details

For accessing and setting up search analytics, refer to the Search Analytics and Site Search Reports docs.

 

Website Header

Navigation

The system requires the capability for the user to be able to view website header on the L’azurde website and access key information .

  • Display brand title according to the Brand selected

  • Display Promotion banner, if the website has any promotion going on.

    • Clicking on the link will take the user to the Promotion page

  • For the first time user, Language and Region bar to appear for user to select their preferred Language and Region bar.

  • Top Menu Bar

    • Shop by Boutique (Section Removed By Client)

    • Store Locator

    • Region and Language selector

    • My Account Icon

    • Wishlist

    • Cart

  • Category Bar

    • Brand Logo

    • New In

    • Jewelry

    • Diamonds

    • Bridal

    • Gifts

    • Live Events

    • Search Bar

  • An ability to have standard header across all pages on the website other than Checkout and Thank you page

  • An ability for the menu expand on hover or tap with animations

 

Mini Cart

The system requires the capability for the user to be able to have a mini cart view on the website header and be able to see cart information.

  • Display cart icon on header. Clicking icon expands mini cart to show user added items in cart with all required details as per designs.

  • Mini cart will also expand whenever use carts an item to cart from any page.

  • On collapsed view, the cart icon should show Item count badge.

  • Ability to proceed to cart page from mini-cart (cart is always the first step of the checkout).

 

Implementation Details

The header component is to be created on Bloomreach Content CMS. This component should be added on every applicable page within Content CMS. Page UI to be designed as per Figma Designs. For details on creating the required menu fields and header component, refer to Bloomreach Content CMS sections.

 

Website Footer

The system requires the capability for the user to be able to see a Website footer at all times to view information related to L’azurde

  • Sign Up/Sign In. On click, user to be taken to Sign Up/Sign In screen, Provide information of 10% discount for Member Signup ‘Sign Up And Get 10% Off’

  • Social Platform Links

    • Instagram

    • Facebook

    • Pinterest

    • Twitter

    • YouTube

  • Customer Service Section

    • Contact Us

    • FAQ

    • Store locations

  • Services section

    • Sale permit

    • Terms and Conditions

    • Warranty

  • L’azurde World

    • About L’azurde

    • Heritage

    • Celebrities Choice

    • Governance and Investor Relations

  • Maroof QR Code

  • Language and Region selection

    • Country dropdown. On select, website to be changed according to the selected country

    • Language dropdown. On select, website to be changed according to the selected language

  • Payment Options references

    • Tabby

    • Paypal

    • Apple Pay

    • Visa

    • Mada

    • Tamara

  • Footer should be visible on all pages expect Checkout and Thank you page

 

Implementation Details

The footer is component to be created on Bloomreach Content CMS. This component should be added on every applicable page within Content CMS. Page UI to be designed as per Figma Designs. For details on creating the required menu fields and footer component, refer to Bloomreach Content CMS sections.

Product Listing Page (PLP)

Displaying Product Listing Page Elements

The website user should be able to navigate to the Product Listing page to browse and add products to the cart. The acceptance criteria include various ways to access the Product Listing page, such as through the category bar, hero section, shop now button, what's trending section, and more. Clicking on the desired option takes the user to the Product Listing page, which displays the category title, category thumbnails (e.g., necklaces, rings), breadcrumb navigation, filters, sort by option, and pagination. The page also includes a CTA to view all products, a product list with thumbnails, names, and prices (including discounts), product ribbons or tags (e.g., new, online exclusive), and indications for out of stock or discontinued products. If a product is in the user's wishlist but no longer available, recommendations based on that product are shown.

Implementation Details

Each product listing page to be created on Bloomreach Content CMS. Page UI to be designed as per Figma UI designs. Explore all categories section to be created as a reusable component on Bloomreach Content CMS. Refer to the PLP Page Creation Guide section for step by step details for creating PLP pages and related components.

 

Product Images on PLP

The user should be able to view product images based on their preference on the Product Listing page (PLP). The acceptance criteria include the ability to switch between product view and model view. The user should be able to change the view for all products or individual products by selecting a tab or hovering the pointer respectively. It is specified that the changes made by the user should not be kept in the session and the default selection should be product view. This means that any changes made by the user will not be retained when navigating to other categories or refreshing the page.

 

Implementation Details

Product images on PLPs to be displayed as per the Figma designs. The source for product images is Plytix PIM. If the product contains multiple images then they would be displayed in a slider. The image switching will not be kept in user session.

 

Sorting Functionality on PLP

The user wants to have sorting functionality on the Product Listing page (PLP) to sort the list according to their preferences. The acceptance criteria include the availability of a Sort by Menu on the Filter and Sort bar, with options such as sorting by new, price (high to low and low to high), recommended, best sellers, most viewed, and biggest saving. The default sorting option is "New." When the user clicks on a sorting option, the Product Listing page should sort the products accordingly. Additional requirements include the ability to manipulate the PLP based on visual merchandising configuration, apply default sorting per product category, visually order products per category, display out of stock items at the end of the listing page, handle discontinued products and wishlist items, and specify fallback for sorting default. If no default sort order is configured per category, the sorting will default to "Featured Products," and if that is not configured either, the default will be "New."

 

Implementation Details

New, Price Low to High and Price High to Low sorting filters to be implemented by Shopdev as explained in the Product Search API section. The other sorting filters are to be implemented as part of engagement module by Voxwise. For adjusting product ranking, refer to the Ranking Tool docs.

 

Filter Functionality on PLP

The user should be able to apply filters on the Product Listing Page (PLP) to get products based on their preferences. The acceptance criteria include having filter functionality on the PLP through filter options on the Filter and Sort bar. On the mobile version, the filter options should appear in a dropdown menu. The available filter options include filtering by price, brand, category, metal, type, gemstone, and filtering for new products only. When the user selects filters, the product listing page should be updated based on the selections. Key requirements for filters include the ability to configure filters per product category independently, configure filter groups for categories, allow multi-select filters, and ensure regular data sync for up-to-date filtering and sorting, including integration with third-party systems.

Implementation Details

Filters UI to be implemented as per the Figma UI designs. All product attributes which are to be used as filters must be configured in Bloomreach Searchandizing dashboard. For configuring filters and facets, refer to the Facet Management docs.

 

Configuring Ribbons in the PLP

The admin needs to be able to configure ribbons for the Product Listing Page (PLP) so that they can appear on products. The acceptance criteria include the ability for the admin to configure ribbons on the PLP with the following key requirements:

  1. Ribbon Rules: The admin should be able to define business rules to show ribbons on products based on criteria such as new, clearance/sale, bestsellers, or exclusivity.

  2. Custom Ribbons: The admin should be able to define custom ribbons to display on the PLP.

  3. Ribbon Design: The admin should have control over the appearance and visual design of the ribbons.

  4. Apply Ribbons: The admin should be able to apply ribbons to individual products, and the available ribbon options may include "New," "Sale," "Exclusive," and "Discount."

 

Implementation Details

Ribbons to be included in the Ribbons product attribute array in Plytix PIM. If the Ribbon is added to product attributes then it will show up on PLP as per the UI designs.

 

Seasonal Campaigns on PLP

The user needs to be able to see seasonal campaigns on the Product Listing Page (PLP) in order to browse products according to the campaign and place orders. The acceptance criteria state that the user should be able to view seasonal campaigns on the PLP, including the campaign title and tags on the products. The key configurations for this feature include,

  1. Configuring Seasonal Campaigns: The system should allow the configuration of seasonal campaigns with the following details:

    • Products allocated to the campaign

    • Promotion terms and conditions

    • Expiry date of the campaign

    • Number of days to expiry

    • Display a countdown of the time left to buy on the last day of the promotion

  2. Promotion Restrictions: The system should support any restrictions or limitations on the promotion, such as eligibility criteria or quantity limits.

 

Implementation Details

Seasonal campaigns to be added as part of Occasions and Campaigns attribute in Plytix PIM. A PLP to be created on Bloomreach Content CMS with details added about
campaign name, start and expiry time and T&C details. Promotion to be created from Cegid and synced with BigCommerce.

 

Lazy Loading

The user needs to be able to scroll through the Product Listing Page (PLP) in order to browse all the products. The acceptance criteria state that when the user scrolls to the bottom of the page while browsing all the products, a lazy loading mechanism should be triggered to load more products. This ensures that as the user continues to scroll, additional products are dynamically loaded and displayed on the PLP, allowing them to browse through a larger inventory without having to navigate to separate pages or load all products at once.

Implementation Details

Lazy loading of products to be controlled by a Load More button as per the new requirement.

 

Adding to Cart on PLP

The user needs to have the ability to add products directly to the cart from the Product Listing Page (PLP) in order to make a purchase. The acceptance criteria state that the user should be able to add a product to the cart by clicking an "Add to Cart" button on the product thumbnail. The "Add to Cart" button should appear when hovering over the product thumbnail. Additionally, the mini cart should reflect the product added to the cart, and the badge count on the mini cart should update accordingly. There is also a configuration for a quick buy option, allowing users to quickly add an item to the cart and proceed to checkout. The options presented to the user for adding to cart should be based on stock availability. It's important to note that these options are only available on desktop and not on mobile.

Implementation Details

Add to cart UI to be implemented as per the Figma Designs. Add to Cart API as described in the Cart section to be triggered.

 

Adding to Wishlist on PLP

The user needs to have the ability to add products to their Wishlist directly from the Product Listing Page (PLP) in order to make a purchase later. The acceptance criteria state that the user should be able to add a product to the Wishlist by clicking an "Add to Wishlist" button or a heart icon on the product thumbnail. The "Add to Wishlist" button or icon should appear when hovering over the product thumbnail (for desktop) or on the Product Listing page. The Wishlist icon should reflect the product added to the Wishlist. Additionally, the user should be able to add products to their Wishlist when they are logged in, and if they are not logged in, a trigger option to log in should be provided.

Implementation Details

Add to wishlist UI to be implemented as per the Figma Designs. Add to Wishlist API as described in the Wishlist section to be used.

Product Description Page (PDP)

Defining PDP page elements

The system requires an ability for the user to be able to go to a Product detail page to view details and add to cart.

  • Ability for user to go to PDP from product listings from pages e.g. Home page, Product listing page (PLP). User will be redirect on click product image/thumbnail.

  • Ability to have breadcrumb navigation on the PDP for better navigation

  • Display product images and videos on the PDP for devices.

  • Displayed images should have the following functionality:

    • Carousel - View multiple images in a carousel, max images per standard product 4

    • Zoom - Ability to zoom into an image of the product by screen tap and mouse hover.

    • 360° - Ability to view 360° Images

    • Videos - Ability to capture video of a product (not part of phase 1)

    • Images per variant

      • Ability to capture and view images per variant

      • View images in the selected Product color

    • Advanced functionality - Ability to have zoom/swipe/multi-touch features for images ( Mobile /touch screen)

  • Display product content section (see PRD for full details)

  • Display ribbons and tags configured of the Product on the PDP

  • Display alternate product in case a product is sold out or not available

  • Display recommend products to the user based on ML, driven by CDXP

  • Display recently viewed products on the PDP

  • An ability to allow user to opt in for in stock alert (In case of Out of stock item)

  • Display promotion related to the Product or store if available

  • All products suggestions should be in stock and available to buy

 

Defining PDP secondary page elements (not part of phase 1)

The system requires the ability to have enhancements for a better experience on the Product detail page.

  • Ability to generate a small sound to indicate successful ATC.

  • An ability to configure widgets per device

  • An ability to allow user to share product on social platforms (Facebook, Twitter, Instagram, Whatsapp, Pinterest, Email/Others)

 

Implementation Details

For details on implementing PDP pages, refer to the Product Details (PDP) and Product Reviews sections.

 

Wishlist

Unified Wishlist

The system requires an ability to have a unified Wishlist across all brands and show these products in Wishlist sections.

The User should to be able to add products to their Wishlist from the Product detail page of the Product for any brand. Following are the key requirements:

  • User can then view the all the products in their Wishlist and purchase them afterwards. Also, this Wishlist will be unified/common so can have products from different L’azurde’s websites on any given time unless the user changes the region

  • Share Wishlist via share options to others

    • Share Wishlist via Social Platforms

    • Share Wishlist via Email

    • Share Wishlist via Text/WhatsApp

The Common Wishlist will only be valid in the same region, for example One Wishlist would only work for UAE region, For KSA Region the user would have a separate Wishlist based on their KSA Account.

Managing Wishlist

The system requires an ability for the user to be able to manage their Wishlist in “My Account” and be able to ATC products.

  • Ability to be able to manage their Wishlist on the My Wishlist section on the My Account

  • My Wishlist Listing Page Details

    • Display number to show the count of items in the Wishlist

    • CTA - Add All to Bag - On click, all the items in the Wishlist will be added to bag and user will be taken to the bag (Cart page)

    • Items Listing

      • Item Thumbnail

      • Item Title

      • Item Price

      • CTA - Add to Bag. On click, the item will be added to bag and user would be notified

      • CTA - Remove. On click, the user would be asked if they want to remove the item from Wishlist. If yes, the item would be removed

    • Products not available in Region. In case there are products from region other than current selected region, they will be displayed in this section greyed out.

    • No Products in Wishlist - In case there are no products in the User’s Wishlist:

      • Message to be displayed - “You currently don’t have any items on the Wishlist”.

      • CTA - Start shopping - On click, the user to be taken to the L’azurde homepage

  • Breadcrumb Navigation Wishlist - An ability to navigate on the Wishlist page through breadcrumb navigation

  • Prompt to login if User is Guest - Ability to trigger alert to the user to login if they are adding to Wishlist as a guest user

 

Implementation Details

For details on implementing Wishlist, refer to the Wishlist sections.

 

SEO

Robots.txt configuration

The system requires an ability to be able to configure a Robots.txt file for SEO.

  • Ability to be able to manage the allow/disallow process for the robots.txt file.

  • Ability to be able to configure which URLs can and cannot be crawled by Google.

  • Ability to add XML sitemaps to robots.txt file.

  • Ability to update the robots.txt file from the BigCommerce backend.

Implementation Details

A robots.txt file lives at the root of your site. So, for site www.example.com, the robots.txt file lives at www.example.com/robots.txt. robots.txt is a plain text file that follows the Robots Exclusion Standard. A robots.txt file consists of one or more rules. Each rule blocks or allows access for all or a specific crawler to a specified file path on the domain or subdomain where the robots.txt file is hosted.

File will be created in the root of our NextJS storefront.

For further details, refer to https://developers.google.com/search/docs/crawling-indexing/robots/create-robots-txt#:~:text=The%20robots.txt%20file%20must,.com%2Frobots.txt%20..

 

Sitemaps configuration on the Website

The system requires an ability to configure sitemaps on the L’azurde website.

  • Sitemap XML Categories/PDF/CMS

    • Ability to create a specific sitemap for Homepage, (CLPs & PLPs), PDPs and content pages - split by market and language.

    • Ability to automate the XML sitemap when new products/brands/landing pages are added/removed.

    • No dynamic URLs should be included in the XML sitemaps (Optional).

    • The sitemap should contain href lang tags for all URLs (For eg - A PLP in KSA EN should have all its variations listed in other markets and language) (Optional).

Implementation Details

To create and implement a sitemap, follow these steps:

  1. Plan the structure of your website: Determine which pages are most important and understand their hierarchical relationship with other pages.

  2. Create the sitemap file: You can write a sitemap file manually using XML syntax or use an online sitemap generator tool to automatically generate the file for you.

  3. Submit the sitemap file to Google: Sign in to Google Search Console and navigate to the "Sitemaps" section under "Index". Click the "Add/Test Sitemap" button and enter the URL of your sitemap file.

  4. Monitor the sitemap's status: After submitting the sitemap, review the status report to verify that Google has successfully processed it. The report will also show any errors or warnings that need to be addressed.

  5. Update the sitemap regularly: As changes are made to the website, be sure to update the sitemap file and submit the new version to Google for indexing.

For further details refer to https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap

Href-Lang

The system requires an ability to configure Href-lang on the L’azurde website.

  • Requirements

    • Create a file to direct Google to appropriate country/language

    • All indexable pages on the website should contain the href lang tags in the HTML (For eg - A PLP page on the website should have all its variations basis market and language should be listed in the HTML).

Implementation Details

Need to implement href lang tag in head section for each version
Here is an example:

Add <link rel="alternate" hreflang="lang_code"... > elements to your page header to tell Google all of the language and region variants of a page.

For each variation of the page, include a set of <link> elements in the <head> element, one link for each page variant including itself. The set of links is identical for every version of the page. See the additional guidelines.

Here is the syntax of each link element:

For each domain

<link rel="alternate" hreflang="lang_code" href="http://www.lazurde.ae" /> <link rel="alternate" hreflang="lang_code" href="http://www.lazurde.sa " /> <link rel="alternate" hreflang="lang_code" href="www.lazurde.eg" /> Google does not require a separate file for href-lang tags usage.

Href-lang tags will be implement on NextJS frontend.

For further details refer to https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites

 

Canonical URLs

The system requires an ability to configure Canonical URLs on the L’azurde website.

  • Requirements

    • Google needs rules and implementation to prevent duplicate indexation.

    • All indexable URLs should contain self referencing canonical tags by default. [Except dynamic/filter pages these will have canonicals to the respective category or brand page].

    • The system should have the ability to manually overwrite the canonical tags for the pages.

Implementation Details

Adding canonical tag in Next.js

Here's a step-by-step implementation using BloomReach Content and Next.js for canonical URLs on the L'azurde website:

BloomReach Content Configuration:
a. Log in to BloomReach Content and access the website's configuration settings.
b. Locate the SEO settings or Metadata settings section where you can manage canonical URLs.
c. Enable the option to automatically generate self-referencing canonical tags for all indexable pages by default.
d. Configure dynamic/filter pages to have canonical tags pointing to their respective category or brand pages.
e. Save the configuration changes.

Next.js Implementation:
a. Identify the layout or template file(s) in your Next.js project that render the HTML structure of your website.
b. Install the necessary dependencies for handling server-side rendering (SSR) in Next.js, such as next-seo or react-helmet.
c. Import the required modules into your layout or template file(s).

Configure Self-Referencing Canonical Tags:
a. Within the layout file(s), locate the code responsible for rendering the <head> section of each page.
b. Implement logic to dynamically generate the canonical URL for each page.
c. Retrieve the current page's URL and assign it to a variable.
d. Render the self-referencing canonical tag within the <head> section using the appropriate module from the imported dependencies.

Handle Dynamic/Filter Pages:
a. Identify the dynamic or filter pages in your Next.js project.
b. Modify the logic for generating canonical URLs to handle these pages differently.
c. Retrieve the respective category or brand page URL for each dynamic/filter page.
d. Render the canonical tag within the <head> section using the appropriate module, pointing to the respective category or brand page URL.

Manual Override of Canonical Tags:
a. Implement a mechanism to allow manual override of canonical tags for specific pages.
b. Create a user-friendly interface within the CMS or an admin panel to input or modify the canonical URL for each page.
c. Store the manually overridden canonical URL in a suitable data structure or database.

Retrieve Manual Overrides:
a. Update the logic for generating canonical URLs to check for any manually overridden URLs for each page.
b. Retrieve the manually overridden URL for the current page from the data structure or database.
c. If a manual override exists, use it as the canonical URL for the page. Otherwise, proceed with the default self-referencing canonical URL logic.

Page Title

The system requires an ability to configure Page Title for SEO configuration on the L’azurde website.

Page title should be template driven and customizable (<meta name="title" content="xxx/>), And the systems can overwrite tags by a csv upload.

  • Templates

    • Brand [Eg - Miss L]

    • L1 categories [Eg - Jewelry]

    • L2 categories [Eg - Shop By Metal]

    • L3 categories [Eg - Rings]

    • PDP [Eg - Product Title]

    • Country [Eg - Egypt]

    • Page Number [For paginated pages]

Implementation Details

Page titles will be editable through Bloomreach Content for each page and added as meta tags on NextJS frontend.

2 ways to set page titles and meta descriptions in Next.js. The first approach is only available for server components in Next.js 13 and above, while the second one works well with older versions of the framework. Next.js: Set Page Title and Meta Description

https://nextjs.org/docs/app/api-reference/file-conventions/metadata#other

(CSV upload) This would add to the scope of FE implementation. Cannot be made part of September go live.

 

Meta Description

The system requires an ability to configure Meta Description on the L’azurde website.

META Description should be template driven with the ability to customize each one individually (<meta name="description" content="xxx/>), And systems can overwrite tags with a csv upload.

  • Templates

    • Brand [Eg - Miss L]

    • L1 categories [Eg - Jewelry]

    • L2 categories [Eg - Shop By Metal]

    • L3 categories [Eg - Rings]

    • PDP [Eg - Product Title]

    • Country [Eg - Egypt]

    • Page Number [For paginated pages]

Implementation Details

Meta descriptions will be editable through Bloomreach Content for each page and added as meta tags on NextJS frontend.

2 ways to set page titles and meta descriptions in Next.js. The first approach is only available for server components in Next.js 13 and above, while the second one works well with older versions of the framework. Next.js: Set Page Title and Meta Description

https://nextjs.org/docs/app/api-reference/file-conventions/metadata#other

(CSV upload) This would add to the scope of FE implementation. Cannot be made part of September go live.

Alt-Text for Images

The system requires an ability to configure Alt-text for images on the L’azurde website. Following is the requirement:

  • Requirements

    • Images should be named appropriately (descriptive names rather than file numbers) and ALT text should replicate the image file name.

    • System should add the product title as the “alt” automatically.

    • For multiple images, system should append a number [For Eg - 18K Gold Diamond Drop Earring - 2].

Implementation Details

Image details (title, alt-text etc) will be added and provided by the image source i.e. Plytix PIM or Bloomreach Content. Frontend will implement these images accordingly.

 

<h>-Headlines

The system requires an ability to configure <h>-headlines for text based content on the L’azurde website.

  • Heading Tag structure to be implemented (H1 - H3) based on site designs.

  • Ability to add and modify any heading tag.

  • Ability to configure tags from H1 - H4

  • No irrelevant heading tags placement (eg: On elements from footer of website, sign up, add to cart etc.)

  • By default all page headings should have <h> tags [basis design] -

    • Page title - <h1>

    • Sub headings - <h2>

    • Sub-Sub headings <h3>

    • All PDP titles on PLPs - <h3>

Implementation Details

Heading tags will be implemented on NextJS frontend as per the SEO figma designs.

 

Domain structure

URL structure shared by Incubeta

https://docs.google.com/spreadsheets/d/1Qqh2ITTQr_peKZHsESZ4b9W6yuclX-LK3t6zwJQFCxs/edit#gid=1250074119

Implementation Details

  • NextJS folder structure for creating L’azurde PLPs → /pages/[slug]/[categoryName/campaignName]

  • NextJS folder structure for creating MissL' PLPs → /pages/missl/[slug]/[categoryName/campaignName]

  • NextJS folder structure for creating Waves PLPs → /pages/waves/[slug]/[categoryName/campaignName]

  • NextJS folder structure for creating L’azurde PDPs → /pages/p/[productSKU-productTitle]

  • NextJS folder structure for creating MissL PDPs → /pages/missl/p/[productSKU-productTitle]

  • NextJS folder structure for creating Waves PDPs → /pages/waves/p/[productSKU-productTitle]

  • NextJS folder structure for creating L’azurde Collections → /pages/collections/[collectionName]

  • NextJS folder structure for creating MissL Collections → /pages/missl/collections/[collectionName]

  • NextJS folder structure for creating Waves Collections → /pages/waves/collections/[collectionName]

 

Automatic URL Rewrites

The system requires an ability to configure Automatic URL Rewrites on the L’azurde website.

  • URL structure should be clean and driven by taxonomy naming conventions

Implementation Details

When using parameters in a rewrite the parameters will be passed in the query by default when none of the parameters are used in the destination.https://nextjs.org/docs/pages/api-reference/next-config-js/rewrites#rewrite-parameters

 

Custom URL 

The system requires an ability to configure Custom URL for SEO on the L’azurde website.

  • An ability to configure Custom URL for SEO configuration.

Implementation Details

Custom URLs is not possible but predefined new URLs as predecided URLs will be added

 

Miss L' URL Takedown

The system requires an ability to redirect Miss L' to L’azurde once it’s taken down.

  • Key Requirements

    • Miss 'L Jewelry website is currently a standalone website. However, it will be taken down and it will be come under L’azurde website / domain. However, it will still have its own UI.

    • The domain name of Miss L Jewelry and will 301 redirect directly to Miss L within the L’azurde platform. Example: Going to Miss L Rings would 301 redirect the user to Miss L rings on L’azurde website.

Implementation Details

In Next.js, we can list all the redirections inside the next.config.js file.

Assume that the old path /old-contact-page and the new path is /new-contact-page.

Set Up the 301 Redirect in a Next.js App or https://nextjs.org/docs/pages/api-reference/next-config-js/redirects

 

Redirection of Existing URLs

The system requires an ability to configure redirects for existing URLs.

Implementation Details

Regional URL redirection and 404 redirection will be handled by NextJS frontend.

In Next.js, we can list all the redirections inside the next.config.js file.

Assume that the old path /old-contact-page and the new path is /new-contact-page.

Set Up the 301 Redirect in a Next.js App or https://nextjs.org/docs/pages/api-reference/next-config-js/redirects

 

Design Review

The system requires an ability that the Wireframes and site designs to be reviewed to ensure SEO friendly (ie. heading tags, on page content, internal linking)

SEO team will also review the HTML on staging along with the backend for items mentioned in this document

Implementation Details

Frontend will be implemented as per SEO requirement's and figma designs.

 

Filtering

The system requires an ability to configure Filters for SEO configuration.

  • Requirements

    • Rules to be created in order to account for filtered URLs and multi-select attributes across one or more filter types.

    • Display the filters applied separately for the user to understand what filters are currently applied while allowing the user to remove filters when needed.

    • The filter bar needs to be sticky and follow the user scrolls through the page.

    • Filter dynamic URLs should contain canonical tags to the main page.

Implementation Details

Filter Dynamic URL contain canonical tag implementation

Adding canonical tag in Next.js

 

Schema Markup

The system requires an ability to configure Schema for SEO Configuration.

Schema markup required across various page types with key information (ratings/reviews, price, availability, product attributes).

The system requires an ability to manage schema codes from the backend at a template level homepage, categories and PDPs.

  • Additional schema to be integrated apart from product schema

    • Breadcrumb schema

    • Organization schema

    • Local Business schema

Implementation Details
Schema Markup 

https://prismic.io/docs/schema-org-nextjs

https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data#structured-data

https://blog.harveydelaney.com/creating-breadcrumb-structured-data-for-your-react-typescript-website/

add multiple local business schema in my next js application, next-seo package for this https://stackoverflow.com/questions/64047197/array-of-localbusinessjsonld-schema-using-next-seo

Content Placeholder

The system requires an ability to have content placeholder for SEO Configuration.

  • Requirements

    • Adding an HTML content placeholder on the category and homepage. This will be place above the footer section.

    • Ability to implement and configure heading tags (H1, H2, H3), integrate texts in HTML.

    • Ability to add links in the content to other pages.

    • A read more tab will be present to expand the content on mobile and desktop.

Implementation Details

Placeholder component to be created from frontend and content will be added to pages through Bloomreach Content.

 

Internal Links

The system requires an ability to have internal links for SEO Configuration.

  • Requirements

    • A “popular search” section to be placed under the main footer section for internal linking. This can be in an accordion.

    • Ability to implement/customize new anchor text and hyperlinks as suggested by SEO team on the footer section on main L'azurde website, Miss L and other brand pages.

    • Ability to implement/customize popular searches section across the website which hyperlinks to relevant pages.

Implementation Details

Popular search section to be implemented by Voxwise team.

 

Pagination

The system requires an ability to have Pagination scrolling for SEO Configuration.

  • Requirements

    • Replace the numbered pagination to a ‘load more’ button.

    • Webpage to have static URL on “load more” click (rings/page-2) instead of dynamic URL (rings/?page=2).

    • Implement noindex, follow meta directives onto paginated pages.

    • Implement rel next and rel prev directives on paginated pages.

    • Implement self referencing canonicals on paginated pages.

    • Main page’s meta title to be appended with page number.

       

Implementation Details

Pagination will be implemented on NextJS frontend as per the SEO figma designs.

 

Navigational Links

The system requires an ability to have Navigational Links on PLPs for SEO configurations.

  • Requirements

    • The system requires an ability to manually add links and anchors to these tabs.

    • Create a new placeholder under the breadcrumb of PLP pages to link important pages .
      Example:
      On the rings category page the placeholder can include hyperlinks to static pages for ‘Engagement.
      ring’, ‘Cocktail rings’ or any other new landing page that we may create.

Implementation Details

Navigational Links will be implemented on NextJS frontend as per the SEO figma designs.

 

Breadcrumb

The system requires an ability to have Breadcrumb across the Website for SEO Configuration.

  • Requirements

    • All levels of page hierarchy to be displayed on the breadcrumb.

    • CrOn the PDP page level, product title should be the last level without the link.

    • Ability to change “Home” in the primary level of breadcrumb to respective brand name.

    • Breadcrumb schema implementation to be automated.

Implementation Details

Breadcrumbs will be implemented on NextJS frontend as per the SEO figma designs.

Dynamic Breadcrumbs in NextJS https://dev.to/dan_starner/building-dynamic-breadcrumbs-in-nextjs-17oa

 

Image Optimization

The system requires an ability to have Image optimization for SEO Configuration.

  • Requirements

    • All images to be compressed and resized to fit the container.

    • ages should be in the webp format for optimal compression. (100kb or less per image).

Implementation Details

Optimized images to be added and provided by the image source i.e. Plytix PIM or Bloomreach Content. Storefront will implement these images accordingly.

 

404 Page Management

The system requires an ability to have 404 Page Management for SEO Configuration.

  • Requirements

    • Ability to redirect the 404 product/category to the parent category automatically. [For eg - 14K Diamond Drop Earring if 404ed should redirect to/jewelry/earrings].

    • Ability to manually overwrite the automatic redirect to a custom 200 OK product URL.

    • Ability to upload a csv for bulk overwrites of automatic 404 redirects.

Implementation Details

404 page redirection will be handled by NextJs storefront.
(Manual Overwrite and CSV upload) This would add to the scope of FE implementation. Cannot be made part of September go live.

Discontinued Product Communication

The system requires an ability to have Discontinued Product Communication on PDPs for SEO Configuration.

  • Requirements

    • Ability to add a “permanently out of stock” message on selected products.

    • Ability to add a widget for similar products on such pages.

Implementation Details

“permanently out of stock” attribute should be added from Plytix PIM. Storefront will use attribute to show message as per figma designs.

Need details on how data will be provided to ‘similar products’ widget. Need figma designs as well.

 

Store page

The system requires an ability to have Store Page URLs for SEO Configuration.

  • Requirements

    • Each Store to have a unique URL on click with separate meta directives.

    • Automation of schema implementation on store pages.

Implementation Details

On Bigcommerce, will have three stores for each region. Each store will have its own SEO compliant url.

 

Meta directives

The system requires an ability to have Meta Directives and Meta Robots for SEO Configuration. Following are the key requirements:

  • Requirements

    • All pages we would like to get indexed should contain a “index,follow” meta directive.

    • Ability to manually change meta directives of pages on the CMS.

Implementation Details

Meta data will be added on storefront, with some meta data being retrieved from Bloomreach Content.

 

CDN

The system requires an ability to have CDN Image Hosting for SEO Configuration. Following are the key requirements:

  • Requirements

    • Ensure that your images are always hosted on your own domain.

    • Ensure that CDN is enabled on your own domain rather than any third party domain so that all link equity that you get through image links should be passed on to your main domain.

Implementation Details

Product images to be hosted on Plytix DAM. Banners and other images to be hosted on Bloomreach Content CMS.

 

 

Core Web Vitals

The system requires an ability to have Core Web Vitals (Website Performance) for SEO Configuration.

  • Requirements

    • We (Incubeta) will be reviewing the website on staging while it's being developed to share recommendations related to core website vital issues like - CLS, LCP
      and FID etc.

Implementation Details

Web vitals will be regularly monitored through Pagespeed Insights and Vercel Analytics and Speed Insights. Approriate steps will be taken to ensure site speed/vitals remain within acceptable range.

 

Interfaces

eCommerce Interfaces

The system needs an ecommerce interface for Product Information Management (PIM) with several key requirements. It should be able to display products and catalogs, including master data and catalog information. Additionally, it should allow eligibility checks on the SKU level for voucher codes and promotions. To indicate if a product is eligible for vouchers and promotions, there should be a checkbox that can be applied to each product.

 

Implementation Details

PIM interface to be provided by Plytix. eCommerce interface to be provided by BigCommerce.

 

Order Interfaces

The system needs an interface for order management with several key requirements. It should support different delivery options such as backorder (made to order) and standard delivery. The system should also handle stock movement and updates, including availability and ATP (available to promise) through real-time API calls. Order status updates should include accepted, dispatched, delivered, and cancelled statuses. The system should capture order and return data, including price, discounts, items, quantity, services, delivery details, payment information, scheduled delivery, channel ID, and fulfilling site. Additionally, it should support return orders, receiving return items, and processing refunds based on the business process flows.

Implementation Details

Order management interface to be provided by FlowOMS.

 

Placeholder for Image Assets

The system needs a placeholder for image assets with the following requirements. While loading image assets, a generic animation or placeholder image of the same size should be displayed. This could be a low-quality picture or a consistent loading animation for all images.

Implementation Details

React Loading Skeleton to be used for adding loading skeletons all over the website.

 

CMS Management

The system needs the ability to manage CMS (Content Management System) with the following key requirements. The CMS should allow for the editing of labels, messages, and text elements displayed on each Country Site and brand, enabling flexibility in their appearance. There should be a workflow in place for content creation, translation review, approval, and publishing to the target environment. Additionally, the system should ensure that content is not hard-coded and can be easily exchanged.

Implementation Details

Bloomreach Content CMS to be used as the CMS for L’azurde.

 

Preview Feature

The system needs a Preview feature for the CMS (Content Management System) with the following key requirements. It should allow for scheduling the publishing of various site content such as taxonomy, campaigns, product mapping, product content, static content, etc. This scheduling should include start and end date configurations to enable automatic publishing and unpublishing. Additionally, there should be a capability to preview the site based on date selection, allowing users to preview promotions and other content after the specified start date.

Implementation Details

For development purposes the preview to be enabled on local machines by following the steps in setting up a development project docs. For prod environment, external preview to be enabled by following the steps in the Enable External Preview docs.

 

Notifications

Registration Confirmation

The system requires the ability for a use to receive a registration confirmation notification after signing up on a website. The acceptance criteria include sending an email confirmation for successful registration, a confirmation email template, and an email notification for email verification. Additionally, an email notification should be sent for successful account creation, and the email content will be provided by the design team.

Order State Notifications

The system requires the ability for a user to get notifications for their orders and track their order status. The notifications include confirmation, dispatch, delivery, cancellation and return/refund.

Subscription Notifications

The system requires the ability for a user to subscribe to notifications on the website based on their preferences. The notifications include opt-in confirmation for new subscribers and the ability to send email notifications for newsletter subscriptions and availability notifications. The system should update customers when an item is back in stock, and link to CDXP to ensure email notifications are sent to customers

Cart Abandonment

The system requires the ability for a user to receive emails for any abandoned carts and be able to view these carts and complete the purchase. The acceptance criteria requires generating a notification for a cart that was abandoned by the customer on the checkout page and sending an email notification with cart details in order to recover the cart from being abandoned.

Marketing Notifications

Abandoned Carts Configuration

The system requires the ability for the user to receive abandoned cart notifications and be able to view these carts and complete the purchase. The system should be able to identify and notify the user of an abandoned cart that has not been checked out within a given time frame. The user should also have the ability to opt-out of these notifications via their Market Notification settings.

 

Cart Abandonment Triggers

The system requires the ability for an admin to be able to configure cart abandonment rules for customers to receive abandonment notifications. The admin should be able to set the time limit for when a cart is considered abandoned, select triggers for when notifications should be sent (taking into account if another notification was recently sent), and set the frequency of the abandoned shopping cart notifications. (to be configured via CDXP)

 

Immersive Experience

AR Solution via Tangiblee

The system requires the capability for the user to have a Virtual Try On feature on the L'azurde website in order to visualize how a product would look on them and make a purchase decision. The acceptance criteria state that the user should be able to access the Virtual Try On feature on the Product Detail page using an AR solution provided by Tangiblee. The key requirements include integrating the Virtual Try On feature from Tangiblee into the website and enabling customers to see how a product will look on themselves without leaving the product page.

 

Implementation Details

Virtual try on to be enabled on PDP via Tangiblee script. Please note that we don’t have designs for Tangiblee on PDP.

<script async src="https://cdn.tangiblee.com/integration/3.1/managed/www.tangiblee-integration.com/revision_1/variation_original/tangiblee-bundle.min.js"></script>

For detailed integration guide, refer to the Tangiblee docs.

 

Live Selling

For information about requirements an implementation details, refer to Store Elements on Home Page section.

Nonfunctional requirements

Data Retention and Disaster Recovery

Admins can back up products, customers and orders data using BigCommerce’s csv export features. In case of data loss, the data can be quickly re-imported via CSVs.
Refer to the Back Up Your Store docs for further understanding.

Communication Protocol – SSL/Encryption

The NextJS storefront to be hosted on Vercel. Vercel ensures SSL encryption for websites deployed on their platform through the following mechanisms:

  • Automatic SSL Provisioning: When a website is deployed on Vercel, they automatically provision and manage SSL certificates for all custom domains. This ensures that all traffic to the website is encrypted using the HTTPS protocol.

  • Integration with Let's Encrypt: Vercel integrates with Let's Encrypt, a widely recognized certificate authority, to obtain SSL certificates. Let's Encrypt provides free SSL certificates, making it accessible and cost-effective for website owners to secure their websites.

  • Certificate Renewal and Management: Vercel handles the renewal and management of SSL certificates automatically. This includes monitoring the expiration of certificates and renewing them before they expire, ensuring continuous SSL encryption without any manual intervention.

  • Domain Validation: Vercel validates domain ownership before issuing SSL certificates. This validation process ensures that only authorized individuals or organizations can obtain SSL certificates for a specific domain.

  • SSL/TLS Configuration: Vercel configures SSL/TLS protocols and cipher suites to ensure secure and up-to-date encryption standards. They follow industry best practices for SSL/TLS configuration to provide strong security for websites.

  • Automatic Redirects: Vercel automatically redirects HTTP traffic to HTTPS, ensuring that all connections to the website are encrypted. This helps in enforcing SSL encryption and maintaining a secure browsing experience for visitors.

By employing these measures, Vercel prioritizes the security of websites hosted on their platform and ensures that data transmitted between clients and the website is protected through SSL encryption.

Performance and Load Balancing

The NextJS storefront is to be hosted on Vercel. Vercel provides Analytics such as unique website visitors, page views, visitor country, visitor browser and OS. Vercel also provides speed insights which include speed insights for each page, code web vitals and virtual and real experience scores. For further details about Vercel analytics and speed insights set up, visit Vercel Analytics and Speed Insights docs. Detailed analytics are to be enabled via Bloomreach Pixel tracking as mentioned in the Bloomreach Discovery and Pixels section. Google Analytics will also be integrated for granular tracking.

As a Serverless and CDN solution, Vercel is highly scalable out-of-the-box and doesn't require human intervention to adjust server instances nor load-balancers.

Peak Scalability

Vercel scales websites automatically to handle high traffic situations using its serverless infrastructure. Here's how Vercel achieves scalability:

  1. Serverless Architecture: Vercel's platform is built on a serverless architecture, which means that resources are allocated dynamically as needed. It uses a combination of containers and serverless functions to handle incoming requests.

  2. Global CDN: Vercel utilizes a global content delivery network (CDN) to cache and distribute your website's static assets. This ensures that content is served from the nearest edge location to the user, reducing latency and improving performance.

  3. Automatic Scaling: When traffic to your website increases, Vercel automatically scales the infrastructure to handle the load. It dynamically allocates additional resources, such as containers and serverless functions, to handle incoming requests and ensure responsiveness.

  4. Elasticity: Vercel's infrastructure scales up or down based on demand. When traffic subsides, it automatically adjusts the allocated resources to optimize cost efficiency.

  5. Instant Scaling: Vercel has the ability to scale instantaneously in response to traffic spikes. This ensures that your website remains available and performs well even during sudden surges in user activity.

By leveraging serverless architecture, a global CDN, and automatic scaling capabilities, Vercel is designed to handle high traffic situations and ensure that the website remains accessible and performs well even under heavy load.

 

Modern Caching Approach

NextJS, a popular framework for building React applications, provides various mechanisms for caching data. Here are some ways NextJS can cache data:

  1. Server-Side Rendering (SSR) Caching: NextJS supports server-side rendering, where the server generates the initial HTML response for a page. During SSR, data can be fetched from an API or a database, and NextJS can cache the generated HTML based on the incoming request. This caching mechanism helps improve performance and reduces the load on the server.

  2. Static Site Generation (SSG) Caching: NextJS also supports static site generation, where HTML pages are pre-generated at build time. Data can be fetched during the build process, and the resulting HTML pages can be cached for subsequent requests. This caching allows for fast and efficient delivery of static content.

  3. Incremental Static Regeneration (ISR): NextJS introduced Incremental Static Regeneration, which combines static site generation with the ability to update specific pages dynamically. With ISR, you can define a revalidation interval for specific pages, and NextJS will automatically update the data for those pages at the specified interval, providing a balance between static content and dynamic updates.

  4. Client-Side Caching: NextJS applications can leverage client-side caching mechanisms such as browser caching, service worker caching, or client-side state management libraries like Redux. These approaches allow data to be cached and reused within the client's browser, reducing the need for repeated network requests.

NextJS provides flexibility in choosing the caching strategy based on your application's requirements. Whether it's server-side rendering, static site generation, incremental static regeneration, or client-side caching. For Lazurde’s NextJS storefront, a combination of all 4 caching strategies will be used for caching data effectively and optimize the performance of application. Following page generation techniques will be used for L’azurde’s NextJS storefront,

  • All static/ancillary pages will be generated using SSG

  • PLPs and PDPs will be generated using a combination of SSG and ISR

  • PII, Cart and Checkout pages will be generated using SSR

  • All pages will use client-side caching via Reach Query library for HTTP request data caching

CSS & JS Bundling

CSS Bundling

  • Next.js supports various CSS approaches, including CSS Modules, CSS-in-JS libraries like styled-components or Emotion, and global CSS.

  • When using CSS Modules or CSS-in-JS, Next.js automatically processes and bundles the CSS styles alongside the components that use them. This allows for modular and scoped styling.

  • Next.js extracts and optimizes the CSS during the build process, removing any unused styles and minimizing the overall size of the bundled CSS.

  • The resulting CSS is then included in the HTML output, either inlined or loaded as a separate CSS file, depending on the configuration.

JS Bundling

  • Next.js uses webpack under the hood for JavaScript bundling.

  • JavaScript files, including React components and any imported modules, are analyzed and bundled together to minimize the number of network requests and optimize performance.

  • Next.js supports tree shaking, a technique that eliminates unused code during the bundling process, reducing the bundle size.

  • The bundled JavaScript files are optimized for production, including techniques like minification, compression, and code splitting to improve loading speed.

Automatic Code Splitting

  • Next.js automatically performs code splitting to split the JavaScript bundle into smaller chunks.

  • Code splitting enables the loading of only the necessary JavaScript code for each page, reducing the initial load time and improving performance.

  • Next.js identifies the different routes and components used in the application and generates optimized chunks that are loaded on-demand as the user navigates the site.

By bundling CSS and JavaScript files, Next.js optimizes the delivery of styles and code to the client, reducing file sizes and improving performance. The automatic code splitting and optimization techniques employed by Next.js contribute to faster page loads and an enhanced user experience.

OWASP Top 10

The e-commerce system development to be done such that the system is protected from OWASP top 10 security risks.

GDPR

As an ecommerce platform, BigCommerce is compliant with GDPR.
BigCommerce GDPR Compliance

PCI Compliance

The NextJS storefront will use BigCommerce’s Checkout and Payments SDK along with Checkout.com payment processor for credit card and Apple Pay payments. The SDK is PCI compliant and sends the card data to the payment gateway in a secure tokenized manner.

Tabby, ValU and Tamara BNPL methods provide their own hosted PCI compliant environments for capturing credit card information. Responsibility for PCI compliance lies with the BNPL providers.

SOX

BigCommerce is SOC 1 and SOC 2 compliant and meets the SOX requirements.

BigCommerce SOC 1 and SOC 2

ISO 9000

ISO 27001

BigCommerce is ISO 27001 certified.

BigCommerce ISO 27001 Certification

ISO 27017-18

Existing Customer Architecture

Currently L’azurde e-commerce website is managed by Magento and all the user management, products / inventory management along with other essential modules that required for a e-commerce website is being controlled by the Magento admin portal.

Furthermore, 3rd party integrations and extensions being used along with Magento are

  • OTO for Courier Management

  • WhatsApp for support, linked with business phone numbers for each region

  • Checkout.com payment gateway for credit card payments

  • Euroland widgets for real-time shares information

  • Valu and Tabby for buy now pay later in Egypt and Saudi / KSA region

  • Hotjar for customer behavior tracking

Proposed Architecture

 

 

 

 

E-commerce System Components

Bloomreach Discovery and Pixels

Bloomreach Discovery is a SaaS-based product discovery platform that helps you curate relevant, intelligent, and efficient digital search experiences so that your customers find the right products at the right time with maximum ease. Discovery equips you with real-time data and actionable customer behavior insights that help you fine-tune your customers' search experiences to their preferences.

For empowering AI powered semantic search and customizable merchandising on L’azurde’s e-commerce website, each page of the website will integrate Bloomreach Pixels.

A pixel is a JavaScript code that must be add to the site’s pages to send necessary data to Bloomreach. The pixels track customers' activities on the site such as page views, clicks on products, search, add-to-cart etc. which add behavioral learning data to Bloomreach's algorithm. Over a period of time, data captured by the pixel amounts to a powerful and intuitive search solution. Following core pixels will be added to L’azurde e-commerce website,

  • Page View Pixels for tracking Global, Product, Category, Search and Conversion pages

  • Event Pixels for tracking Add-to-cart (ATC), Search and Suggest events

 

Page View Pixels

The Bloomreach Page View Pixels track views of customers on website pages. The page view pixels to be integrated on L’azurde e-commerce website are as follows,

Global Page View Tracking Snippet to be added in NextJS storefront.

<script type="text/javascript"> var br_data = br_data || {}; br_data.acct_id = "<Bloomreach Provided Account ID>"; br_data.ptype = "<Bloomreach Page Type>"; br_data.title = "<title of current page>"; br_data.domain_key = "<Bloomreach Domain Key>"; br_data.view_id = "<Bloomreach View ID>"; br_data.user_id = "<Bloomreach User ID>"; br_data.tms = "<Tag Management system to exclude during transition>"; (function() { var brtrk = document.createElement('script'); brtrk.type = 'text/javascript'; brtrk.async = true; brtrk.src = "//cdn.brcdn.com/v1/br-trk-{{BloomReach Account ID}}.js"; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(brtrk, s); })(); </script>

 

Product Page View Tracking snippet to be added on Product Detail page template. On the Product Detail page, add the product specific tracking parameters to Global Page View Tracking snippet

<script type="text/javascript"> var br_data = br_data || {}; // Global tracking parameters br_data.acct_id = "<Bloomreach Provided Account ID>"; br_data.ptype = "product"; br_data.title = "<title of current page>"; br_data.domain_key = ""; br_data.user_id = ""; br_data.view_id = ""; br_data.tms = "" // INSERT the Product specific Tracking Parameters in your Global Tracking Script // in your PRODUCT PAGE TEMPLATE. br_data.prod_id = "prod1234"; br_data.prod_name = "Blue Lace Dress"; br_data.sku = "sku7778"; // End - Product specific Page Tracking Parameters (function() { var brtrk = document.createElement('script'); brtrk.type = 'text/javascript'; brtrk.async = true; brtrk.src = "//cdn.brcdn.com/v1/br-trk-{{BloomReach Account ID}}.js"; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(brtrk, s); })(); </script>

 

Content Page View Pixel

 

Content Search Pixel to be added

< script type = "text/javascript" > var br_data = br_data ||{}; br_data.acct_id = "1234"; br_data.ptype = "search"; br_data.search_term = "omelette"; br_data.domain_key = "<domain_key_name>"; # domain_key should change to highlight the active domain the user is on (e.g.example.com or example.com_fr) br_data.catalogs = [{"name": "<catalog name>"}]; # The Bloomreach Technical Consultant will provide this; when domain_key changes between example.com and example.com_fr, catalog name will also change. (function (){ var brtrk = document.createElement('script'); brtrk.type = 'text/javascript'; brtrk.async = true; brtrk.src = "//cdn.brcdn.com/v1/br-trk-{{BloomReach Account ID}}.js"; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(brtrk, s); })(); </script> < script type = "text/javascript" >

 

Category Page View Pixel to be added on each Product Listing page. If a user applies a filter and results are refreshed, Bloomreach expects that the Category Page View pixel fires each time a filter is applied. To fire a category page view pixel each time a user applies a filter, refer to Virtual Page View Pixel section.

<script type="text/javascript"> var br_data = br_data || {}; // Global tracking parameters br_data.acct_id = "<Bloomreach Provided Account ID>"; br_data.ptype = "category"; br_data.title = "<title of current page>"; br_data.domain_key = ""; br_data.user_id = ""; br_data.view_id = ""; br_data.tms = "" // INSERT the Category specific Tracking Parameters in your Global Tracking Script // in your CATEGORY PAGE TEMPLATE. br_data.cat_id = "106121"; br_data.cat = "106120|106121"; // End - Category page specific tracking parameters (function() { var brtrk = document.createElement('script'); brtrk.type = 'text/javascript'; brtrk.async = true; brtrk.src = "//cdn.brcdn.com/v1/br-trk-{{BloomReach Account ID}}.js"; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(brtrk, s); })(); </script>

 

Search Result Page View Pixel to be add on Search Results page template. On the search results page, add the search specific tracking parameters in the Global Tracking snippet. If a user applies a facet filter and refreshes results, Bloomreach expects that the Search Result Page View pixel fires each time a filter is applied. To fire a search results page view pixel each time a user applies a filter, refer to Virtual Page View Pixel section.

<script type="text/javascript"> var br_data = br_data || {}; // Global tracking parameters br_data.acct_id = "<Bloomreach Provided Account ID>"; br_data.ptype = "search"; br_data.title = "<title of current page>"; br_data.domain_key = ""; br_data.user_id = ""; br_data.view_id = ""; br_data.tms = "" // INSERT the Search specific Tracking Parameters in your Global Tracking Script // in your SEARCH RESULTS PAGE TEMPLATE. br_data.search_term = "blue dress"; // End - Search Results page specific tracking parameters (function() { var brtrk = document.createElement('script'); brtrk.type = 'text/javascript'; brtrk.async = true; brtrk.src = "//cdn.brcdn.com/v1/br-trk-{{BloomReach Account ID}}.js"; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(brtrk, s); })(); </script>

 

Conversion Page View Pixel to be added on Thank You page. On the thank you page, add basket and Conversion specific Page View parameters in the Global Tracking snippet. We will be using Bigcommerce Checkout.js Thank you page. Script will be added directly into Thank you page through code.

<script type="text/javascript"> var br_data = br_data || {}; // Global tracking parameters br_data.acct_id = "<Bloomreach Provided Account ID>"; br_data.ptype = "other"; br_data.title = "<title of current page>"; br_data.domain_key = ""; br_data.user_id = ""; br_data.view_id = ""; br_data.tms = "" // INSERT the Conversion & Basket specific Tracking Parameters in your Global Tracking Script // in your CONVERSION/ THANK YOU PAGE TEMPLATE. br_data.is_conversion = 1; br_data.basket_value = "445.93"; br_data.order_id = "12123455"; br_data.basket = { "items": [ { "prod_id" : "pid1111", "sku": "sku1234", "name": "Linen Pillow", "quantity": "1", "price": "35.95" }, { "prod_id" : "pid2222", "sku": "", "name": "Linen Comforter", "quantity": "1", "price": "230.00" }, { "prod_id" : "pid56789", "sku": "", "name": "Blue Skinny Jeans", "quantity": "2", "price": "79.99" } ] }; ; // End - Conversion page specific tracking parameters (function() { var brtrk = document.createElement('script'); brtrk.type = 'text/javascript'; brtrk.async = true; brtrk.src = "//cdn.brcdn.com/v1/br-trk-{{BloomReach Account ID}}.js"; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(brtrk, s); })(); </script>

 

Virtual Page View Pixel to be added to pages wherever we need to track an AJAX interaction that loads content outside of the normal page load cycle. For example, when user applies a filter on a PLP, the PLP results are refreshed and a new tracking event needs to be passed to Bloomreach.

var br_data = br_data || {}; // Global pixel parameters ..., br_data.acct_id = "<Bloomreach Provided Account ID>"; br_data.ptype = "<Bloomreach Page Type>"; br_data.title = "<title of current page>"; br_data.domain_key = "<Bloomreach Domain Key>"; br_data.view_id = "<Bloomreach View ID>"; br_data.user_id = "<Bloomreach User ID>"; br_data.tms = "<Tag Management system to exclude during transition>" // Add additional Product, Category, Search or Conversion specific pixel parameters // here ... // this parameter is required on all Virtual Page Loads br_data.orig_ref_url = location.href; BrTrk.getTracker().updateBrData(br_data); BrTrk.getTracker().logPageView();

 

For more information and in-depth understanding about data values and variables in page view pixel scripts, please refer to Page View Pixels Reference.

Event Pixels

Bloomreach Event Pixels track various user interaction events that can occur on a page, such as adding products to the cart or interacting with a page element. Events always occur on a page view, so the associated page view pixel information must be passed together with the event pixel. Event pixels to be integrated on L’azurde e-commerce website are as follows,

Add-to-cart (ATC) Pixel to be add fired any time a user adds an item to their cart. ATC event to be captured on the product detail page, product listing pages and search pages. The following snippet for the ATC event must be tied to Add To Cart buttons all over the website site,

BrTrk.getTracker().logEvent('cart', 'click-add', {'prod_id': '<Product ID>', 'sku' : '<Sku ID>'});

Search Event Pixel to be fired each time the user types a search query in the search box and then clicks the search button or hits enter to submit the search query.

var searchData = {}; searchData["q"] = "woven scarf"; searchData["catalogs"] = [{ "name" : "example_en" }]; BrTrk.getTracker().logEvent("suggest", "submit",searchData,{},true);

Implementing Pixels in Test Environment

In a test environment (development, staging, UAT, etc.), a test_data variable must be added. This will ensure that Bloomreach ignores test data during analytics processing.

For more information and in-depth understanding about data values and variables in event pixel scripts, please refer to Event Pixels Reference.

Pixels on PII Pages

Some pages include Personally Identifiable Information (PII), especially registration pages and secure login pages, payment details pages, delivery information pages, account settings pages, etc. Bloomreach does not collect PII. Bloomreach recommends against integrating the pixels on pages with this kind of information.

Do not add the pixels on pages where PII is passed.

Bloomreach Catalog Feed

The product catalog will be fed from BigCommerce to Bloomreach via a script provided by Bloomreach team.

Step 1. Format your data

You must format your catalog data properly in order for Bloomreach to ingest it. In this step, you will learn how to format a product record, which contains the data for a single product. We also provide details on how to implement variants and/or views, if your catalog uses them.

  • Products

  • Variants

  • Views

  • Variants and Views

Step 2. Send your data

After properly formatting your catalog data, you must send it to Bloomreach for ingestion. There are two modes of delivery:

  • PUT (full replacement of catalog data)

  • PATCH (partial updates to catalog data)

Catalog data may be sent as an API payload, or as a file sent to a SFTP.

Step 3: Configure Attributes

You can configure your product catalog data attributes such as title, description, price, sku, etc. so that Bloomreach processes your data the way you need it. Work with your Bloomreach representative to configure the required attributes.

Step 4. Publish the index

You must publish the index in order to query your catalogs with our Search APIs. Make sure to deploy the Product Search API .

Add Case

When an any product added in big commerce store it will share the product payload on middleware endpoint which is subscribe through big commerce webhook topic name as store/product/created you can find all details hare how we can subscribe webhook event and also check sample data that is provided by big commerce.

https://developer.bigcommerce.com/api-docs/store-management/webhooks/webhook-events#products

after receiving data in middleware it map according to Bloomreach put api payload and send it to this endpoint

https://api-staging.connect.bloomreach.com/dataconnect/api/v1/accounts/7235/catalogs/{{domain_key}}/products 

curl --location --request PUT 'https://api-staging.connect.bloomreach.com/dataconnect/api/v1/accounts/7235/catalogs/lazurde/products' \ --header 'Content-Type: application/json-patch+json' \ --header 'Authorization: Bearer lazurde-59ced8e7-845c-4b92-807e-402af4eda7b3' \ --data '[ { "op": "add", "path": "/products/pid-123", "value": { "attributes": { "title": "Example 123", "price": 100, "description": "Example product description here", "url": "http://www.example.com/example-product-url.html", "availability": true } } } ]'

when it will insert successfully it will return job id after that run final call of index posting through this endpoint

https://api-staging.connect.bloomreach.com/dataconnect/api/v1/accounts/7235/catalogs/{{domain_key}}/indexes

curl --location --request POST 'https://api-staging.connect.bloomreach.com/dataconnect/api/v1/accounts/7235/catalogs/lazurde/indexes' \ --header 'Authorization: Bearer lazurde-59ced8e7-845c-4b92-807e-402af4eda7b3' \ --data ''

when job successfully posted now it available on Bloomreach dashboard for search

Update Case

 

When an any product updated in big commerce store it will share the product payload on middleware endpoint which is subscribe through big commerce webhook topic name as (store/product/updated) you can find all details hare how we can subscribe webhook event and also check sample data that is provided by big commerce.

https://developer.bigcommerce.com/api-docs/store-management/webhooks/webhook-events#products

{ scope: "store/product/inventory/updated", store_id: "1025646", data: { type: "product", // will always be product id: 167, // ID of the product inventory: { product_id: 167, // ID of the product method: "absolute", // absolute or relative // absolute -- inventory updated using the API or the control panel // relative -- inventory updated by an order value: 100000000, // the number of items that the inventory changed by // value can be negative if the inventory is decreased (-3) or positive if an item is returned to the inventory from an order, (+2) }, }, hash: "cba9eef399fbd6d384489bca6cacad24794b1086", created_at: 1561478843, producer: "stores/{store_hash}", }

after receiving data in middleware it map according to Bloomreach patch API payload and send it to this endpoint

https://api-staging.connect.bloomreach.com/dataconnect/api/v1/accounts/7235/catalogs/{{domain_key}}/products 

curl --location --request PATCH 'https://api-staging.connect.bloomreach.com/dataconnect/api/v1/accounts/7235/catalogs/lazurde/products' \ --header 'Content-Type: application/json-patch+json' \ --header 'Authorization: Bearer lazurde-59ced8e7-845c-4b92-807e-402af4eda7b3' \ --data '[ { "op": "add", "path": "/products/pid-123", "value": { "attributes": { "title": "Example 123", "price": 100, "description": "Example product description here", "url": "http://www.example.com/example-product-url.html", "availability": false } } } ]'

when it will update successfully it will return job id after that run final call of index posting through this endpoint

https://api-staging.connect.bloomreach.com/dataconnect/api/v1/accounts/7235/catalogs/{{domain_key}}/indexes

curl --location --request POST 'https://api-staging.connect.bloomreach.com/dataconnect/api/v1/accounts/7235/catalogs/lazurde/indexes' \ --header 'Authorization: Bearer lazurde-59ced8e7-845c-4b92-807e-402af4eda7b3' \ --data ''

when job successfully posted now it available on Bloomreach dashboard for search. In any case if you want to check job status simply run this api to check job status

curl --location 'https://api-staging.connect.bloomreach.com/dataconnect/api/v1/jobs/0c470f96-bf68-4cf7-822d-e534625d1f4c' \ --header 'Authorization: Bearer lazurde-59ced8e7-845c-4b92-807e-402af4eda7b3'

Note: all data will update according to domain key wise

Bloomreach Searchandizing

The product search on L’azurde e-commerce website will be powered by Bloomreach Search and Merchandising APIs.

Environments and Endpoints

Bloomreach Search and Merchandising exposes two environments to enable you to integrate and deploy: staging and production. A typical integration involves integrating against the staging servers. All lower environments (DEV, QA and UAT) of NextJS storefront to be pointed towards staging API servers. Production NextJS storefront to be pointed to Bloomreach’s production API servers.

Staging Endpoint

Production Endpoint

 

Product Search and Category API

For keyword search and populating the search results page, following Product Search API to be used,

GET http://core.dxpapi.com/api/v1/core/? account_id=<Bloomreach Provided Account ID> &auth_key=jazzhands &domain_key=example_com &request_id=8438674500839 &_br_uid_2=uid=7797686432023:v=11.5:ts=1428617911187:hc=55 &ref_url=http://www.example.com/home &url=http://www.example.com/index.html?q=dresses &request_type=search &search_type=keyword &q=dresses &fl=pid,title,brand,price,sale_price,thumb_image,url,description &rows=10 &start=0

For populating the product listing page for a particular category, use the following Category Search API,

GET https://core.dxpapi.com/api/v1/core/? account_id=<Bloomreach Provided Account ID> &auth_key=jazzhands &domain_key=example_com &request_id=8830241055597 &_br_uid_2=uid=7797686432023:v=11.5:ts=1428617911187:hc=55 &ref_url=http://www.example.com/home &url=http://www.example.com/index.html?q=cat000922 &request_type=search #Value must be search for Category API &rows=20 &start=0 &fl=pid,title,brand,price,sale_price,colors,sizes,thumb_image,price_range,sale_price_range &q=cat000922 &search_type=category #Value must be keyword for Category API

The category search API performs search based on category ID.

For searching category tree, make use of the following parameters,

&q=cat11287000 &fq=category:cat11287001 AND cat112872001

For more in-depth understanding details about each query parameter, please refer to the Product Search and Category API reference.

For faceting and filtering, make use of the fq parameter, for example,

&fq=color:"red" #Searches for dresses that are red, purple, or red and purple &q=dresses &fq=color:"red" OR "purple" #Searches for red dresses made by Rebel in Rose &q=dresses &fq=color:"red" &fq=brand:"Rebel in Rose" #Searches for dresses in category 1001 &q=dresses &fq=category:"1001" #Searches for dresses that are: #1. red, purple, or red and purple #2. in category 1001 #3. are size 10 #Only returns results that match all 3 filters &q=dresses &fq=category:"1001" &fq=color: "red" OR "purple" &fq=size: "10"

The fq parameter filters on facets. The product attribute MUST be enabled for filtering and properly mapped in Bloomreach's configuration. For in-depth understanding and reference, please refer to the Faceting and Filtering reference.

For pagination, make use of the rows and start parameters and numFound value in API response, rows represent the number of products returned and start represents the position of 1st element of that page. Based on numFound, total pages can be calculated. For L’azurde row parameter to be set at 24 products per page.

&rows=24 &start=0

For sorting, make use of the sort parameter,

#By price, ascending &sort=price+asc #By sale price, descending &sort=sale_price+desc #By reviews in descending order, then by sale price in descending order #Multiple values must be comma-separated #Sorting values are applied from left to right &sort=reviews+desc,sale_price+desc

Bloomreach Content - CMS

The NextJS Storefront is to be Integrated with Bloomreach Content Headless CMS. English and Arabic Home Pages, Product Listing Pages, Ancillary Pages and other static content pages to be created on Bloomreach Content CMS. Pages to be created using reusable components created on CMS dashboard, page layout and styling to be controlled by corresponding storefront component. NextJS Storefront to use Bloomreach Content SDK to integrate with Bloomreach Content CMS. All lower environments (DEV, QA, UAT) to be connected with stage instance of Bloomreach Content and Prod env to be connected with Prod instance.

For step by step guide and general understanding about setting up Bloomreach Content CMS and creating components and pages, refer to the following documentation for each step,

  1. Create a Channel

  2. Connect with Storefront

  3. Set up Development Project on Dashboard

  4. Create a Component

  5. Create a Complex Component Data Model

  6. Create a Shared Document-Driven Component

NextJS Storefront will be connected with Bloomreach Content CMS via Bloomreach Content SDK. Bloomreach React SDK provides simplified headless integration with Bloomreach Experience Manager for React-based applications. Following code snippets demonstrate the rendering of a ContentPage component via content SDK.

export function ContentPage({ component, page }) { const document = page.getDocument(); const { title, content, introduction } = document.getData(); return ( <div> <h1>{title}</h1> <p>{introduction}</p> <div dangerouslySetInnerHTML={{ __html: content.value }} /> </div> ); }
import logo from './logo.svg'; import './App.css'; import axios from "axios"; import { BrPage } from "@bloomreach/react-sdk"; import { ContentPage } from "./components/ContentPage"; function App() { return ( <div className="App"> <header className="App-header"> <img src={logo} className="App-logo" alt="logo" /> <p> Edit <code>src/App.js</code> and save to reload. </p> <BrPage configuration={{ endpoint: 'https://developers.bloomreach.io/delivery/site/v1/channels/getting-started/pages', httpClient: axios }} mapping={{ ContentPage }}> </BrPage> </header> </div> ); } export default App;

For detailed guide, refer to the Bloomreach Content SDK documentation.

 

Page Creation Guide

Bloomreach Content SDK requires all pages to be created on Bloomreach Content CMS. Even if the page content is dynamic and unique to each user, page route must be created on the CMS for the Content SDK to render the page on front-end successfully. A general guideline about creating different types of website pages and components for L’azurde is provided for each type of page.

Pre-requisites for All Pages

  1. Navigate to content app on CMS dashboard

  2. From the dropdown in the left-most panel, select Content Types

  3. Look for Bloomreach (brxsaas) and click on menu icon, from the pop-up menu select New document type

  4. Name the document as Page, select 1 Column layout and click Next, Page document type will be created

  5. From the right-most menu, under Primitive Field, select String

  6. Scroll-down the right-most menu, under Field Properties section edit the Name and Default caption to Title

  7. Repeat steps 5 and 7 and create SEO meta description, OG Title, OG Description and OG Url fields and click Done

Home Pages

For creating a home page, follow these steps

  1. Navigate to Experience Manager App and select the channel for which you want to create pages

  2. From the For Project menu at the top centre, select Lazurde Development Project or any other development project you want to create pages for

  3. Click on arrow head at the top-left and expand the Experience Manager menu

  4. From the Sightmap menu, select home

  5. Click on +Page button at top right of the page

  6. Enter Page name, URL, select Document type as Page, select Page layout as One-Column Layout and click Next

  7. Fill all relevant fields and click Create, Home Page will be created

  8. Now go to Site Development app, navigate to routes and create a route for home page

For creating home page components, follow these steps (for Hero Banner component only, rest of the components to follow similar steps)

  1. Go to Components tab in the Site development app, click on +Component and create a component

  2. Extend from base component

  3. Under Properties tab, add properties for Title, Subtitle, Background Image URL, CTA Link and CTA Text

  4. Now, navigate back to Experience Manager app, under Sitemap, select home page, switch to Components tab

  5. From page-specific components list, select Hero Banner and click on the page container at the right to add component to the page

  6. Click on the component added to the page to edit its properties

  7. Now click on Page at the top left, edit page metadata and publish, the page will become available for the storefront application to display

Account Page

Account page is primarily dynamic and generated from within codebase, layout and route must be created on CMS for the SDK to render these pages properly

  1. Go to Site development app, navigate to Page Layouts, click on +Layout

  2. Add “account“ as the layout name, select “page“ as the Type and click Create

  3. Under Layout Structure, click on menu icon on the account accordian and add a static component, name the component as “Account”

  4. Go to Routes tab, click on +Route, add “account“ as route name, and “account“ as Page layout click Save

Ancillary Pages

For creating ancillary pages, follow these steps (for contact page only, rest of the ancillary pages to follow same steps),

  1. Navigate to Experience Manager App and select the channel for which you want to create pages

  2. From the For Project menu at the top centre, select Lazurde Development Project or any other development project you want to create pages for

  3. Click on arrow head at the top-left and expand the Experience Manager menu

  4. From the Sightmap menu, select home

  5. Click on +Page button at top right of the page

  6. Enter Page name, URL, select Document type as Page, select Page layout as One-Column Layout and click Next

  7. Fill all relevant fields and click Create, Contact Page will be created

  8. Now go to Site Development app, navigate to routes and create a route for contact page

For creating home page components, follow these steps (for contact us grid component only, rest of the components to follow similar steps)

  1. Go to Components tab in the Site development app, click on +Component and create a component

  2. Extend from base component

  3. Under Properties tab, add properties for Title, Subtitle, Contact No and Email

  4. Now, navigate back to Experience Manager app, under Sitemap, select home page, switch to Components tab

  5. From page-specific components list, select Contact Us Grid and click on the page container at the right to add component to the page

  6. Click on the component added to the page to edit its properties

  7. Now click on Page at the top left, edit page metadata and publish, the page will become available for the storefront application to display

Category Pages (PLPs)

For PLPs, follow the same steps for creating page layout, route and components as described for other pages. Following key points are to be kept in mind while creating PLP pages,

  1. All types of PLPs, attributes based PLPs, category PLPs, campaign PLPs and promotion PLPs to be created on CMS

  2. All PLPs to have 3 main components, Category Banner, Explore All Categories Cards and Products Grid

  3. Category Banner and Explore All Categories components to be made optional

  4. Category name, tag name and promotion name MUST be provided via CMS

  5. Product search, facets and ranking rules MUST be configured on Bloomreach Searchandizing prior to the creation of PLP

Cart Page

Cart page is primarily dynamic and generated from within codebase, layout and route must be created on CMS for the SDK to render these pages properly

  1. Go to Site development app, navigate to Page Layouts, click on +Layout

  2. Add “cart“ as the layout name, select “page“ as the Type and click Create

  3. Under Layout Structure, click on menu icon on the account accordian and add a static component, name the component as “Cart”

  4. Go to Routes tab, click on +Route, add “cart“ as route name, and “cart“ as Page layout click Save

Checkout Page

Checkout page is primarily dynamic and generated from within codebase, layout and route must be created on CMS for the SDK to render these pages properly

  1. Go to Site development app, navigate to Page Layouts, click on +Layout

  2. Add “checkout“ as the layout name, select “page“ as the Type and click Create

  3. Under Layout Structure, click on menu icon on the account accordian and add a static component, name the component as “Checkout”

  4. Go to Routes tab, click on +Route, add “checkout“ as route name, and “checkout“ as Page layout click Save

Thank You Page

Thank You page is primarily dynamic and generated from within codebase, layout and route must be created on CMS for the SDK to render these pages properly

  1. Go to Site development app, navigate to Page Layouts, click on +Layout

  2. Add “thank you“ as the layout name, select “page“ as the Type and click Create

  3. Under Layout Structure, click on menu icon on the account accordian and add a static component, name the component as “Thank You”

  4. Go to Routes tab, click on +Route, add “thank you“ as route name, and “thank you“ as Page layout click Save

Bloomreach Engagement - CDXP

To be implemented by Voxwise. Thomas for Voxwise to provide details.

Plytix PIM

Plytix Product Information Management (PIM) system to be used for creating and managing product catalog. Product catalog, product taxonomy, categories and hierarchies to be set up on Plytix by L’azurde with the help of Plytix team. Product catalog from Plytix to be synced with BigCommerce via Plytix product APIs. Plytix PIM to be synced with 3 development stores for each region and 3 Production stores.

PIM configuration to be set up for adding products for each brand and each region.

Refer to BigCommerce - Plytix Catalog Feed section for detailed steps.

BigCommerce - Plytix Catalog Feed

Steps 1 through 4 are a one time activity for pushing all products created in Plytix to BigCommerce.

Complete product catalog must be on boarded on Plytix before feed is processed to BigCommerce.

Steps to Generate Product Feed

Step 1. Get Data From Plytix

Get all products data in a paginated response from plytix via /products/search API

curl --location --request POST 'https://pim.plytix.com/api/v1/products/search' \ --header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2NDRhMjM5N2E4M2VjNzAwMDEzYmI0MzgiLCJpYXQiOjE2ODQ0MTczMTcsIm5iZiI6MTY4NDQxNzMxNywianRpIjoiZTc5M2U4ZTUtNzdjNC00YjRhLTlmY2YtN2I4ZTE4ZjQzOTJjIiwiZXhwIjoxNjg0NDE4MjE3LCJ0eXBlIjoiYWNjZXNzIiwiZnJlc2giOnRydWUsInVzZXJfY2xhaW1zIjp7InVzZXIiOnsiaWQiOiI2NDRhMjM5N2E4M2VjNzAwMDEzYmI0MzgiLCJlbWFpbCI6IkJpZ0NvbW1lcmNlLVBseXRpeC1BUEktS2V5IiwibmFtZSI6IkJpZ0NvbW1lcmNlLVBseXRpeC1BUEktS2V5IiwibGFzdF9uYW1lIjpudWxsLCJkaXNwbGF5X25hbWUiOm51bGwsInBpY3R1cmUiOm51bGwsInJvbGUiOiJBRE1JTiIsInVzZXJuYW1lIjpudWxsLCJhdmF0YXJfY29sb3IiOm51bGwsImlzX2ZpbGxpbmdfcHJvZmlsZSI6bnVsbCwiaXNfcHJpdmFjeV9wb2xpY3lfYWNjZXB0ZWQiOm51bGwsImFyZV90ZXJtc19hY2NlcHRlZCI6bnVsbH0sImFjY291bnQiOnsiaWQiOiI2M2Q3ZTc4OGUxMTUxNTAwMDFkZmMzM2EiLCJuYW1lIjoiTGF6dXJkZSBDb21wYW55IGZvciBKZXdlbHJ5ICIsInBpY3R1cmUiOiJodHRwczovL3N0YXRpYy5wbHl0aXguY29tL3RlbXBsYXRlLzIuNC4xL2ltZy9jb21wYW55LWRlZmF1bHQtaW1hZ2UucG5nIiwid2Vic2l0ZSI6Imh0dHA6Ly9sYXp1cmRlLmNvbSIsInNob3dfbW9kYWxfdGMiOmZhbHNlLCJwbGFuIjp7ImFwaSI6eyJhY2Nlc3MiOiJDQVBQRUQiLCJvbl90cmlhbCI6ZmFsc2UsImNhcHBlZF9saW1pdCI6NTAsImhvdXJseV9saW1pdCI6NTAwMCwiY29uc3VtZWRfdHJpYWwiOmZhbHNlfSwicGRmcyI6eyJhY2Nlc3MiOiJDQVBQRUQiLCJvbl90cmlhbCI6ZmFsc2UsImNhcHBlZF9saW1pdCI6MywiY29uc3VtZWRfdHJpYWwiOmZhbHNlfSwic2t1cyI6eyJhY2Nlc3MiOiJDQVBQRUQiLCJjYXBwZWRfbGltaXQiOjEwMDAwMH0sInJvbGVzIjp7ImFjY2VzcyI6IlVOTElNSVRFRCIsIm9uX3RyaWFsIjpmYWxzZSwiY2FwcGVkX2xpbWl0IjowLCJjb25zdW1lZF90cmlhbCI6ZmFsc2V9LCJjaGFubmVscyI6eyJhY2Nlc3MiOiJVTkxJTUlURUQiLCJvbl90cmlhbCI6ZmFsc2UsImNhcHBlZF9saW1pdCI6MCwiY29uc3VtZWRfdHJpYWwiOmZhbHNlLCJzaG9waWZ5X2FjY2VzcyI6dHJ1ZX0sImFuYWx5dGljcyI6eyJhY2Nlc3MiOiJESVNBQkxFRCIsIm9uX3RyaWFsIjpmYWxzZSwiY2FwcGVkX2xpbWl0IjowLCJjb25zdW1lZF90cmlhbCI6ZmFsc2V9LCJlY2F0YWxvZ3MiOnsiYWNjZXNzIjoiQ0FQUEVEIiwib25fdHJpYWwiOmZhbHNlLCJjYXBwZWRfbGltaXQiOjMsImNvbnN1bWVkX3RyaWFsIjpmYWxzZX0sImNvbm5lY3Rpb25zIjp7InNmdHAiOnRydWUsImFjY2VzcyI6IlVOTElNSVRFRCJ9LCJhc3NldF9zdG9yYWdlIjp7ImFjY2VzcyI6IlVOTElNSVRFRCIsImNhcHBlZF9saW1pdCI6MH0sInJlbGF0aW9uc2hpcHMiOnsiYWNjZXNzIjoiQ0FQUEVEIiwiY2FwcGVkX2xpbWl0IjoxMH0sInNjaGVkdWxlZF9pbXBvcnRzIjp7ImFjY2VzcyI6IkNBUFBFRCIsIm9uX3RyaWFsIjpmYWxzZSwiY2FwcGVkX2xpbWl0Ijo1LCJjb25zdW1lZF90cmlhbCI6ZmFsc2V9fSwiYW5hbHl0aWNzX2FjdGl2ZSI6dHJ1ZSwicGltX2FjdGl2ZSI6dHJ1ZSwicGltX3RyaWFsX2V4cGlyaW5nIjpudWxsLCJwaW1fcGxhbiI6eyJjb3JlIjp7InN1YnNjcmlwdGlvbl9jb2RlIjoiUFJPIiwidHJpYWxfY29kZSI6bnVsbCwiYWZ0ZXJfdHJpYWxfY29kZSI6IiIsInRyaWFsX2VuZCI6bnVsbCwidHJpYWxlZF9jb2RlcyI6W10sImNhbmNlbGxpbmciOmZhbHNlLCJjYW5jZWxsYXRpb25fZGF0ZSI6IiJ9LCJjaGFubmVscyI6eyJzdWJzY3JpcHRpb25fY29kZSI6IlBSTyIsInRyaWFsX2NvZGUiOm51bGwsImFmdGVyX3RyaWFsX2NvZGUiOiIiLCJ0cmlhbF9lbmQiOm51bGwsInRyaWFsZWRfY29kZXMiOltdLCJjYW5jZWxsaW5nIjpmYWxzZSwiY2FuY2VsbGF0aW9uX2RhdGUiOiIifSwiY2F0YWxvZ3MiOnsic3Vic2NyaXB0aW9uX2NvZGUiOiJQUk8iLCJ0cmlhbF9jb2RlIjpudWxsLCJhZnRlcl90cmlhbF9jb2RlIjoiIiwidHJpYWxfZW5kIjpudWxsLCJ0cmlhbGVkX2NvZGVzIjpbXSwiY2FuY2VsbGluZyI6ZmFsc2UsImNhbmNlbGxhdGlvbl9kYXRlIjoiIn19LCJhbmFseXRpY3NfcGxhbiI6eyJjb3JlIjp7InN1YnNjcmlwdGlvbl9jb2RlIjoiUFJPIiwidHJpYWxfY29kZSI6bnVsbCwiYWZ0ZXJfdHJpYWxfY29kZSI6IiIsInRyaWFsX2VuZCI6bnVsbCwidHJpYWxlZF9jb2RlcyI6W10sImNhbmNlbGxpbmciOmZhbHNlLCJjYW5jZWxsYXRpb25fZGF0ZSI6IiJ9fSwibG9ja2VkIjpudWxsLCJwZW5kb19kYXRhIjpudWxsLCJiZXRhX2ZlYXR1cmVzIjp7InJlbmRlcl9odG1sX2luX3Byb2R1Y3Rfb3ZlcnZpZXciOnsiYWN0aXZlIjpmYWxzZX19LCJzdWJzY3JpcHRpb25fdHlwZSI6IlBBSUQifSwibWVtYmVyc2hpcCI6eyJpZCI6bnVsbCwicm9sZSI6IkFETUlOIiwidmlydHVhbCI6ZmFsc2UsInBlcm1pc3Npb25zIjp7InBpbV9hY2Nlc3MiOnRydWUsImFkbWluX2FjY2VzcyI6dHJ1ZSwicGltX3Blcm1pc3Npb25zIjp7ImFzc2V0cyI6IkVESVQiLCJjaGFubmVscyI6IkVESVQiLCJwcm9kdWN0cyI6IkVESVQiLCJlY2F0YWxvZ3MiOiJFRElUIiwiY29ubmVjdGlvbnMiOiJFRElUIiwicGRmX3RlbXBsYXRlcyI6IkVESVQiLCJhc3NldF9wZXJtaXNzaW9ucyI6eyJzZXR0aW5ncyI6eyJjYXRlZ29yaWVzIjoiRURJVCJ9fSwicHJvZHVjdF9wZXJtaXNzaW9ucyI6eyJhY2Nlc3MiOnsiaW1wb3J0cyI6IkVESVQiLCJmYW1pbGllcyI6IkVESVQiLCJhdHRyaWJ1dGVzIjoiRURJVCIsImNhdGVnb3JpZXMiOiJFRElUIiwicmVsYXRpb25zaGlwcyI6IkVESVQifSwic2V0dGluZ3MiOnsiZmFtaWxpZXMiOiJFRElUIiwiYXR0cmlidXRlcyI6IkVESVQiLCJjYXRlZ29yaWVzIjoiRURJVCIsInJlbGF0aW9uc2hpcHMiOiJFRElUIn19fSwiYW5hbHl0aWNzX2FjY2VzcyI6ZmFsc2V9fX0sImlkZW50aXR5IjoiNjQ0YTIzOTdhODNlYzcwMDAxM2JiNDM4In0.7GL7ZvPTe7Mivkbo0W7I6EgP1r_vhMeFxEx9Fx-fr1g' \ --header 'Content-Type: application/json' \ --data-raw '{ "pagination": { "page": 0, "page_size": 100 } }'

 

Step 2. Get Category from BigCommerce

Fetch all categories from BigCommerce via BigCommerce API to use the id's of category to map it according to product catalog. Curl:

curl --request GET \ --url 'https://api.bigcommerce.com/stores/[store_hash]/v3/catalog/categories' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: xxxxxxxxxxxxxxxxx'

Please note that the categories must be created in BigCommerce store prior to creating products.

Step 3. Get Product details

For each product, fetch product details from plytix via /products/{productId} API. Curl:

curl --location 'https://pim.plytix.com/api/v1/products/<product_id>' \ --header 'Authorization: Bearer Your.Token.Value' \ --header 'Content-Type: application/json'

Step 4. Create Product in BigCommerce

Create product in BigCommerce according to following mapping

Plytix Field

BigCommerce Field

Comments

product.status

product.is_visible

TRUE if status === “Completed”

product.attributes.bracelet_size

product.custom_fields.push({id: 0, name: “bracelet_size”, value: {{value}})

 

product.attributes.bracelet_size_ar

product.custom_fields.push({id: 1, name: “bracelet_size_ar”, value: {{value}})

 

product.attributes.brand

product.custom_fields.push({id: 2, name: “brand”, value: {{value}})

 

product.attributes.brand_ar

product.custom_fields.push({id: 3, name: “brand_ar”, value: {{value}})

 

product.attributes.category

product.custom_fields.push({id: 4, name: “category”, value: {{value}})

 

product.attributes.category_ar

product.custom_fields.push({id: 5, name: “category_ar”, value: {{value}})

 

product.attributes.country

product.custom_fields.push({id: 6, name: “country”, value: {{value}})

 

product.attributes.metal

product.custom_fields.push({id: 7, name: “metal”, value: {{value}})

 

product.attributes.metal_ar

product.custom_fields.push({id: 8, name: “metal_ar”, value: {{value}})

 

product.attributes.metal_color

product.custom_fields.push({id: 9, name: “metal_color”, value: {{value}})

 

product.attributes.metal_color_ar

product.custom_fields.push({id: 10, name: “metal_color_ar”, value: {{value}})

 

product.attributes.metal_carat

product.custom_fields.push({id: 11, name: “metal_carat”, value: {{value}})

 

product.attributes.metal_carat_ar

product.custom_fields.push({id: 12, name: “metal_carat_ar”, value: {{value}})

 

product.attributes.new_description_ar

product.custom_fields.push({id: 13, name: “description_ar”, value: {{value}})

 

product.attributes.new_title_ar

product.custom_fields.push({id: 14, name: “name_ar”, value: {{value}})

 

product.attributes.type

product.custom_fields.push({id: 15, name: “type”, value: {{value}})

 

product.attributes.type_ar

product.custom_fields.push({id: 16, name: “type_ar”, value: {{value}})

 

product.attributes.campaign_collections

product.custom_fields.push({id: 17, name: “campaign_collections”, value: {{value}})

Stringify the campaign_collections array before setting the value

product.attributes.campaign_collections_ar

product.custom_fields.push({id: 18, name: “campaign_collections_ar”, value: {{value}})

Stringify the campaign_collections_ar array before setting the value

product.attributes.chain_length

product.custom_fields.push({id: 19, name: “chain_length”, value: {{value}})

 

product.attributes.chain_length_ar

product.custom_fields.push({id: 20, name: “chain_length_ar”, value: {{value}})

 

product.attributes.collection

product.custom_fields.push({id: 21, name: “collection”, value: {{value}})

 

product.attributes.chain_length_ar

product.custom_fields.push({id: 22, name: “chain_length_ar”, value: {{value}})

 

product.attributes.diamond_carat__cut

product.custom_fields.push({id: 23, name: “diamond_carat__cut”, value: {{value}})

 

product.attributes.diamond_carat__cut_ar

product.custom_fields.push({id: 24, name: “diamond_carat__cut_ar”, value: {{value}})

 

product.attributes.diamond_carat_only

product.custom_fields.push({id: 25, name: “diamond_carat_only”, value: {{value}})

 

product.attributes.diamond_carat_only_ar

product.custom_fields.push({id: 26, name: “diamond_carat_only_ar”, value: {{value}})

 

product.attributes.diamond_cutshape_only

product.custom_fields.push({id: 27, name: “diamond_cutshape_only”, value: {{value}})

 

product.attributes.diamond_cutshape_only_ar

product.custom_fields.push({id: 28, name: “diamond_cutshape_only_ar”, value: {{value}})

 

product.attributes.diamonds

product.custom_fields.push({id: 29, name: “diamonds”, value: {{value}})

 

product.attributes.diamonds_ar

product.custom_fields.push({id: 30, name: “diamonds_ar”, value: {{value}})

 

product.attributes.earring_size

product.custom_fields.push({id: 31, name: “earring_size”, value: {{value}})

 

product.attributes.earring_size_ar

product.custom_fields.push({id: 32, name: “earring_size_ar”, value: {{value}})

 

product.attributes.pendant_size

product.custom_fields.push({id: 33, name: “pendant_size”, value: {{value}})

 

product.attributes.pendant_size_ar

product.custom_fields.push({id: 34, name: “pendant_size_ar”, value: {{value}})

 

product.attributes.ring_size

product.custom_fields.push({id: 35, name: “ring_size”, value: {{value}})

 

product.attributes.ring_size_ar

product.custom_fields.push({id: 36, name: “ring_size_ar”, value: {{value}})

 

product.attributes.stone

product.custom_fields.push({id: 37, name: “stone”, value: {{value}})

 

product.attributes.stone_ar

product.custom_fields.push({id: 38, name: “stone_ar”, value: {{value}})

 

product.attributes.stone_carat_only

product.custom_fields.push({id: 39, name: “stone_carat_only”, value: {{value}})

 

product.attributes.stone_carat_only_ar

product.custom_fields.push({id: 40, name: “stone_carat_only”, value: {{value}})

 

product.attributes.stone_color_carat__cut

product.custom_fields.push({id: 41, name: “stone_color_carat__cut”, value: {{value}})

 

product.attributes.stone_color_carat__cut_ar

product.custom_fields.push({id: 42, name: “stone_color_carat__cut_ar”, value: {{value}})

 

product.attributes.stone_cutshape_only

product.custom_fields.push({id: 43, name: “stone_cutshape_only”, value: {{value}})

 

product.attributes.stone_cutshape_only_ar

product.custom_fields.push({id: 44, name: “stone_cutshape_only_ar”, value: {{value}})

 

product.attributes.new_title

product.name

 

product.attributes.sku_id_ksa

product.sku

Refer to Product SKU Config section

product.attributes.sku_id_egy

product.sku

Refer to Product SKU Config section

product.attributes.new_description

product.description

 

product.attributes.product_images

product.images.push({

     image_url: pi.url,     url_thumbnail:       pi.thumbnail,

 

})

 

product.categories

product.categories.push({{category_id}})

From product.categories array in plytix product, select category object which has “EN CATEGORY” in path array. Out of path array, ignore path[0] and find corresponding category IDs in BigCommerce categories array fetched in step 2.

Curl for creating product in BigCommerce

curl --location 'https://api.bigcommerce.com/stores/r89pr1d3as/v3/catalog/products' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: dckpx004o0kss70zkm5sjdjz0vkupxk' \ --data '{ "name": "Smith Journal 13", "type": "physical", "sku": "SM-13", "description": "<p><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel metus ac est egestas porta sed quis erat. Integer id nulla massa. Proin vitae enim nisi. Praesent non dignissim nulla. Nulla mattis id massa ac pharetra. Mauris et nisi in dolor aliquam sodales. Aliquam dui nisl, dictum quis leo sit amet, rutrum volutpat metus. Curabitur libero nunc, interdum ac libero non, tristique porttitor metus. Ut non dignissim lorem, in vestibulum leo. Vivamus sodales quis turpis eget.</span></p>", "weight": 9999999999, "width": 9999999999, "depth": 9999999999, "height": 9999999999, "price": 0, "cost_price": 0, "retail_price": 0, "sale_price": 0, "map_price": 0, "product_tax_code": "string", "inventory_level": 2147483647, "inventory_warning_level": 2147483647, "inventory_tracking": "none", "fixed_cost_shipping_price": 0, "is_free_shipping": true, "is_visible": true, "is_featured": true, "warranty": "string", "bin_picking_number": "string", "layout_file": "string", "upc": "string", "search_keywords": "string", "availability_description": "string", "availability": "available", "sort_order": -2147483648, "condition": "New", "is_condition_shown": true, "order_quantity_minimum": 1000000000, "order_quantity_maximum": 1000000000, "page_title": "string", "meta_description": "string", "view_count": 1000000000, "preorder_release_date": "2019-08-24T14:15:22Z", "preorder_message": "string", "is_preorder_only": true, "is_price_hidden": true, "price_hidden_label": "string", "open_graph_type": "product", "open_graph_title": "string", "open_graph_description": "string", "open_graph_use_meta_description": true, "open_graph_use_product_name": true, "open_graph_use_image": true, "brand_name or brand_id": "Common Good", "gtin": "string", "mpn": "string", "reviews_rating_sum": 3, "reviews_count": 4, "total_sold": 80, "custom_fields": [ { "name": "ISBN", "value": "1234567890123" } ] }'

 

Step 5. Update Product

Get all products data in a paginated response from plytix via /products/search API by using “modified” filter with greater than and less than operators over a specified time. This is a scheduler based job using aws scheduler service which will run once or twice a day to get updated product data from plytix and post it to Big Commerce. Curl for getting product data from plytix using “modified“ filter.

curl --location 'https://pim.plytix.com/api/v1/products/search' \ --header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2NDRhMjM5N2E4M2VjNzAwMDEzYmI0MzgiLCJpYXQiOjE2ODM1MzM4MjIsIm5iZiI6MTY4MzUzMzgyMiwianRpIjoiM2UxODZkYmItMmE3MS00NWQyLTgzNGUtYTA0NzI0ZDEwZjZkIiwiZXhwIjoxNjgzNTM0NzIyLCJ0eXBlIjoiYWNjZXNzIiwiZnJlc2giOnRydWUsInVzZXJfY2xhaW1zIjp7InVzZXIiOnsiaWQiOiI2NDRhMjM5N2E4M2VjNzAwMDEzYmI0MzgiLCJlbWFpbCI6IkJpZ0NvbW1lcmNlLVBseXRpeC1BUEktS2V5IiwibmFtZSI6IkJpZ0NvbW1lcmNlLVBseXRpeC1BUEktS2V5IiwibGFzdF9uYW1lIjpudWxsLCJkaXNwbGF5X25hbWUiOm51bGwsInBpY3R1cmUiOm51bGwsInJvbGUiOiJBRE1JTiIsInVzZXJuYW1lIjpudWxsLCJhdmF0YXJfY29sb3IiOm51bGwsImlzX2ZpbGxpbmdfcHJvZmlsZSI6bnVsbCwiaXNfcHJpdmFjeV9wb2xpY3lfYWNjZXB0ZWQiOm51bGwsImFyZV90ZXJtc19hY2NlcHRlZCI6bnVsbH0sImFjY291bnQiOnsiaWQiOiI2M2Q3ZTc4OGUxMTUxNTAwMDFkZmMzM2EiLCJuYW1lIjoiTGF6dXJkZSBDb21wYW55IGZvciBKZXdlbHJ5ICIsInBpY3R1cmUiOiJodHRwczovL3N0YXRpYy5wbHl0aXguY29tL3RlbXBsYXRlLzIuNC4xL2ltZy9jb21wYW55LWRlZmF1bHQtaW1hZ2UucG5nIiwid2Vic2l0ZSI6Imh0dHA6Ly9sYXp1cmRlLmNvbSIsInNob3dfbW9kYWxfdGMiOmZhbHNlLCJwbGFuIjp7ImFwaSI6eyJhY2Nlc3MiOiJDQVBQRUQiLCJvbl90cmlhbCI6ZmFsc2UsImNhcHBlZF9saW1pdCI6NTAsImhvdXJseV9saW1pdCI6NTAwMCwiY29uc3VtZWRfdHJpYWwiOmZhbHNlfSwicGRmcyI6eyJhY2Nlc3MiOiJDQVBQRUQiLCJvbl90cmlhbCI6ZmFsc2UsImNhcHBlZF9saW1pdCI6MywiY29uc3VtZWRfdHJpYWwiOmZhbHNlfSwic2t1cyI6eyJhY2Nlc3MiOiJDQVBQRUQiLCJjYXBwZWRfbGltaXQiOjEwMDAwMH0sInJvbGVzIjp7ImFjY2VzcyI6IlVOTElNSVRFRCIsIm9uX3RyaWFsIjpmYWxzZSwiY2FwcGVkX2xpbWl0IjowLCJjb25zdW1lZF90cmlhbCI6ZmFsc2V9LCJjaGFubmVscyI6eyJhY2Nlc3MiOiJVTkxJTUlURUQiLCJvbl90cmlhbCI6ZmFsc2UsImNhcHBlZF9saW1pdCI6MCwiY29uc3VtZWRfdHJpYWwiOmZhbHNlLCJzaG9waWZ5X2FjY2VzcyI6dHJ1ZX0sImFuYWx5dGljcyI6eyJhY2Nlc3MiOiJESVNBQkxFRCIsIm9uX3RyaWFsIjpmYWxzZSwiY2FwcGVkX2xpbWl0IjowLCJjb25zdW1lZF90cmlhbCI6ZmFsc2V9LCJlY2F0YWxvZ3MiOnsiYWNjZXNzIjoiQ0FQUEVEIiwib25fdHJpYWwiOmZhbHNlLCJjYXBwZWRfbGltaXQiOjMsImNvbnN1bWVkX3RyaWFsIjpmYWxzZX0sImNvbm5lY3Rpb25zIjp7InNmdHAiOnRydWUsImFjY2VzcyI6IlVOTElNSVRFRCJ9LCJhc3NldF9zdG9yYWdlIjp7ImFjY2VzcyI6IlVOTElNSVRFRCIsImNhcHBlZF9saW1pdCI6MH0sInJlbGF0aW9uc2hpcHMiOnsiYWNjZXNzIjoiQ0FQUEVEIiwiY2FwcGVkX2xpbWl0IjoxMH0sInNjaGVkdWxlZF9pbXBvcnRzIjp7ImFjY2VzcyI6IkNBUFBFRCIsIm9uX3RyaWFsIjpmYWxzZSwiY2FwcGVkX2xpbWl0Ijo1LCJjb25zdW1lZF90cmlhbCI6ZmFsc2V9fSwiYW5hbHl0aWNzX2FjdGl2ZSI6dHJ1ZSwicGltX2FjdGl2ZSI6dHJ1ZSwicGltX3RyaWFsX2V4cGlyaW5nIjpudWxsLCJwaW1fcGxhbiI6eyJjb3JlIjp7InN1YnNjcmlwdGlvbl9jb2RlIjoiUFJPIiwidHJpYWxfY29kZSI6bnVsbCwiYWZ0ZXJfdHJpYWxfY29kZSI6IiIsInRyaWFsX2VuZCI6bnVsbCwidHJpYWxlZF9jb2RlcyI6W10sImNhbmNlbGxpbmciOmZhbHNlLCJjYW5jZWxsYXRpb25fZGF0ZSI6IiJ9LCJjaGFubmVscyI6eyJzdWJzY3JpcHRpb25fY29kZSI6IlBSTyIsInRyaWFsX2NvZGUiOm51bGwsImFmdGVyX3RyaWFsX2NvZGUiOiIiLCJ0cmlhbF9lbmQiOm51bGwsInRyaWFsZWRfY29kZXMiOltdLCJjYW5jZWxsaW5nIjpmYWxzZSwiY2FuY2VsbGF0aW9uX2RhdGUiOiIifSwiY2F0YWxvZ3MiOnsic3Vic2NyaXB0aW9uX2NvZGUiOiJQUk8iLCJ0cmlhbF9jb2RlIjpudWxsLCJhZnRlcl90cmlhbF9jb2RlIjoiIiwidHJpYWxfZW5kIjpudWxsLCJ0cmlhbGVkX2NvZGVzIjpbXSwiY2FuY2VsbGluZyI6ZmFsc2UsImNhbmNlbGxhdGlvbl9kYXRlIjoiIn19LCJhbmFseXRpY3NfcGxhbiI6eyJjb3JlIjp7InN1YnNjcmlwdGlvbl9jb2RlIjoiUFJPIiwidHJpYWxfY29kZSI6bnVsbCwiYWZ0ZXJfdHJpYWxfY29kZSI6IiIsInRyaWFsX2VuZCI6bnVsbCwidHJpYWxlZF9jb2RlcyI6W10sImNhbmNlbGxpbmciOmZhbHNlLCJjYW5jZWxsYXRpb25fZGF0ZSI6IiJ9fSwibG9ja2VkIjpudWxsLCJwZW5kb19kYXRhIjpudWxsLCJiZXRhX2ZlYXR1cmVzIjp7InJlbmRlcl9odG1sX2luX3Byb2R1Y3Rfb3ZlcnZpZXciOnsiYWN0aXZlIjpmYWxzZX19LCJzdWJzY3JpcHRpb25fdHlwZSI6IlBBSUQifSwibWVtYmVyc2hpcCI6eyJpZCI6bnVsbCwicm9sZSI6IkFETUlOIiwidmlydHVhbCI6ZmFsc2UsInBlcm1pc3Npb25zIjp7InBpbV9hY2Nlc3MiOnRydWUsImFkbWluX2FjY2VzcyI6dHJ1ZSwicGltX3Blcm1pc3Npb25zIjp7ImZpbGVzIjoiRURJVCIsImltcG9ydHMiOiJFRElUIiwiY2hhbm5lbHMiOiJFRElUIiwicHJvZHVjdHMiOiJFRElUIiwic2V0dGluZ3MiOnsiYXR0cmlidXRlcyI6IkVESVQiLCJjb25uZWN0aW9ucyI6IkVESVQiLCJmaWxlX2NhdGVnb3JpZXMiOiJFRElUIiwicHJvZHVjdF9mYW1pbGllcyI6IkVESVQiLCJwcm9kdWN0X2NhdGVnb3JpZXMiOiJFRElUIiwicHJvZHVjdF9yZWxhdGlvbnNoaXBzIjoiRURJVCJ9LCJlY2F0YWxvZ3MiOiJFRElUIiwicGRmX3RlbXBsYXRlcyI6IkVESVQifSwiYW5hbHl0aWNzX2FjY2VzcyI6ZmFsc2V9fX0sImlkZW50aXR5IjoiNjQ0YTIzOTdhODNlYzcwMDAxM2JiNDM4In0.-WjI8SXzHfiZAqRx47yzLeXQGCP6Ff5lZdmec51o7_Y' \ --header 'Content-Type: application/json' \ --data '{ "filters":[ [ {"field":"modified","operator":"gt","value":"2023-04-26"}, {"field":"modified","operator":"lt","value":"2023-04-28"} ] ] }'

Using get product by sku BigCommerce API to check if the product already exists in BigCommerce. Curl:

curl --location 'https://api.bigcommerce.com/stores/r89pr1d3as/v3/catalog/products?sku=SM-13' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: dckpx004o0kss70zkm5sjdjz0vkupxk'

If product exists then using get product by id API to get product details. Update product using update product API. Curl:

curl --location --request PUT 'https://api.bigcommerce.com/stores/r89pr1d3as/v3/catalog/products/135' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: dckpx004o0kss70zkm5sjdjz0vkupxk' \ --data '{ "name": "Smith Journal 14", "type": "physical", "sku": "SM-13", "description": "<p><span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel metus ac est egestas porta sed quis erat. Integer id nulla massa. Proin vitae enim nisi. Praesent non dignissim nulla. Nulla mattis id massa ac pharetra. Mauris et nisi in dolor aliquam sodales. Aliquam dui nisl, dictum quis leo sit amet, rutrum volutpat metus. Curabitur libero nunc, interdum ac libero non, tristique porttitor metus. Ut non dignissim lorem, in vestibulum leo. Vivamus sodales quis turpis eget.</span></p>", "weight": 9999999999, "width": 9999999999, "depth": 9999999999, "height": 9999999999, "price": 0, "cost_price": 0, "retail_price": 0, "sale_price": 0, "map_price": 0, "product_tax_code": "string", "inventory_level": 2147483647, "inventory_warning_level": 2147483647, "inventory_tracking": "none", "fixed_cost_shipping_price": 0, "is_free_shipping": true, "is_visible": true, "is_featured": true, "warranty": "string", "bin_picking_number": "string", "layout_file": "string", "upc": "string", "search_keywords": "string", "availability_description": "string", "availability": "available", "sort_order": -2147483648, "condition": "New", "is_condition_shown": true, "order_quantity_minimum": 1000000000, "order_quantity_maximum": 1000000000, "page_title": "string", "meta_description": "string", "view_count": 1000000000, "preorder_release_date": "2019-08-24T14:15:22Z", "preorder_message": "string", "is_preorder_only": true, "is_price_hidden": true, "price_hidden_label": "string", "open_graph_type": "product", "open_graph_title": "string", "open_graph_description": "string", "open_graph_use_meta_description": true, "open_graph_use_product_name": true, "open_graph_use_image": true, "brand_name or brand_id": "Common Good", "gtin": "string", "mpn": "string", "reviews_rating_sum": 3, "reviews_count": 4, "total_sold": 80, "custom_fields": [ { "name": "test1", "value": "0000000" } ] }'

For Custom Fields Management

https://developer.bigcommerce.com/docs/rest-management/catalog/product-custom-fields#get-custom-fields

Product SKU Config

 

  • If country === “KSA”, use sku_id_ksa as product.sku

  • If country === “EGY”, use sku_id_egy as product.sku

  • If country === “Both”, use appropriate sku_id_{{country}} and create 2 products with exactly same attributes, one using KSA store credentials and other using EGY store credentials

Required Fields

 

  • For “name”, proceed as per mapping table

  • For “price”, use default value of 0

  • For “weight”, use default value of 10

  • For “type”, use default value of “physical”

Flow OMS

@Bilal Javed (Unlicensed) to add details

Flow OMS - Cegid Integration

 

Flow OMS - BigCommerce Integration

 

NextJS Storefront

L`azurdes websites will be built using NextJS framework, connected to Bigcommerce as headless storefronts. BigCommerce's headless storefront and e-commerce features provide businesses with a flexible platform for selling products and services. The headless architecture allows developers to create custom frontend experiences, while the core BigCommerce functionality handles backend management of orders, payments, and inventory. Some of the key ecommerce features include product catalog management, order management, multi-channel selling, shipping and fulfillment options, payment gateway integrations, and advanced reporting and analytics. The platform also has modern development tools such as GraphQL, webhooks, and REST APIs for integration with other systems and applications.

Storefront Credentials

Create a store-level API account through the dashboard/settings. Multiple accounts can be created with different API permissions.
After creating an account, a credential file is downloaded. Keep this file secure as this is the only copy of the created credentials. Credentials can not be seen through the dashboard.

Required credentials for using Bigcommerce APIs

  • store_hash

  • channel_id

    • This is retrieved when creating a new channel. Additionally it can be found when editing an existing channel in the channel manager e.g. https://store-{store_hash}.mybigcommerce.com/manage/channel/{channel_id}/domains
      default channel ID is 1

  • access_token

    • This is created using the store-level API account.

 

Headless Storefront Channel
https://developer.bigcommerce.com/api-docs/channels/tutorials/storefront https://developer.bigcommerce.com/api-docs/storefronts/embedded-checkout/embedded-checkout-tutorial#creating-a-channel

For certain use cases like embedded checkouts, we will need to create a separate storefront channel within Bigcommerce. This will create a unique channel ID for that storefront. This channel ID should be used within most APIs, especially customer management, cart/checkout flow etc.

Create Channel - https://developer.bigcommerce.com/docs/rest-management/channels#create-a-channel

{ type: "storefront", platform: "custom", name: "https://{your-site}.com", };

Returns the channel ID

Create Site - https://developer.bigcommerce.com/docs/rest-management/sites#create-a-site
Links created channel ID with headless storefront domain.

{ "url": "https://{your-site}.com", "channel_id": 0 }

Return the site ID

For most APIs and main flows, we only require the channel ID.

Bigcommerce Frontend APIs

For frontend we will use two types of APIs; GraphQL and REST based management APIs.

GraphQL APIs

Overview - https://developer.bigcommerce.com/api-docs/storefront/graphql/graphql-api-overview

GraphQL APIs can be directly used on the frontend. The only exception to this is when we need to make customer specific requests, using a customer impersonation token. These requests need to be made server-to-server.

Domain/Endpoint

All GraphQL queries use the same domain/endpoint - https://store-{store_hash}-{channel_id}.mybigcommerce.com.com/graphql (see storefront credentials section)

Required Tokens

For frontend use, GraphQL requires an authorization token passed in the API header

{ "content-type": "application/json", "Authorization": Bearer {token}, };

To generate the token, use the create a token API - https://developer.bigcommerce.com/docs/storefront-auth/tokens#create-a-token

{ "allowed_cors_origins": [ {store_domain} ], "channel_id": 1, "expires_at": 1885635176 }

The allowed_cors_origins array currently accepts up to two origins. You will need multiple tokens if you have more origins.

For customer based usage, for example when managing wishlists, we will need to create a customer impersonation token and run the GraphQL APIs as server-to-server APIs.

create customer impersonation token - https://developer.bigcommerce.com/docs/storefront-auth/tokens/customer-impersonation-token#create-a-token

{ "channel_id": 1, "expires_at": 1885635176 }

Then use this token along with the customer ID in API header to make customer specific queries/mutations.

{ "content-type": "application/json", "x-bc-customer-id": {logged_in_customer_id}, "Authorization": `Bearer {customer_impersonation_token}`, };

 

Management APIs

Management APIs are REST APIs and are used as server-to-server APIs. They can not be called directly from the frontend.

Domain/Endpoint

All Management APIs start with the same domain/endpoint - https://api.bigcommerce.com/stores/{store_hash}/ (see storefront credentials section)

Required Tokens

All Management APIs requires an X-auth-token passed in the header

{ "X-Auth-Token": {access_token}, "Content-Type": "application/json", }

access_token is created through the store-level API accounts. (see storefront credentials section)

Product Details (PDP)

Retrieve product by ID using GraphQL APIs - https://developer.bigcommerce.com/graphql-api-reference#query-site

 

query productById( $productId: Int! # Use GraphQL Query Variables to inject your product ID ) { site { product(entityId: $productId) { id entityId name plainTextDescription defaultImage { ...ImageFields } images { edges { node { ...ImageFields } } } prices { price { ...MoneyFields } salePrice { ...MoneyFields } } brand { name } } } } fragment ImageFields on Image { url320wide: url(width: 320) url640wide: url(width: 640) url960wide: url(width: 960) url1280wide: url(width: 1280) } fragment MoneyFields on Money { value currencyCode }

 

Product Reviews

Product reviews will be managed through Stamped.io.

Following Stamped.io account details are required:

  • store hash

  • public API key

  • private API key

Some APIs require an authorization token passed in header.

Authorization token requires Username: {{apiKeyPublic}} Password: {{apiKeyPrivate}} //steps to create const token = `${STAMPED_USERNAME}:${STAMPED_PASSWORD}`; { "Content-Type": "application/x-www-form-urlencoded", "Authorization": `Basic ${Buffer.from(token)?.toString("base64")}`, }

Create Reviews - create reviews

Store hash and public API key are required.

curl --location -g 'https://stamped.io/api/reviews3?apiKey={{apiKeyPublic}}&sId={{storeHash}}' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --form 'productId="4024388163"' \ --form 'author="John Doh"' \ --form 'email="john.doh@example.com"' \ --form 'location="United States"' \ --form 'reviewRating="5"' \ --form 'reviewTitle="This is a test review title"' \ --form 'reviewMessage="This is a test review message"' \ --form 'reviewRecommendProduct="true"' \ --form 'productName="Product'\''s Title"' \ --form 'productSKU="Product'\''s Sku"' \ --form 'productImageUrl="https://example.com/image/product-image.png"' \ --form 'productUrl="https://example.com/products/product-image.png"' \ --form 'reviewSource="api"' \ --form 'photo0=@"/path/to/file"' \ --form 'video0=@"/path/to/file"'

Get reviews for customer - Get Reviews by Email

Store hash and authorization token is required. Also require customer email.

curl --location -g --request GET 'http://s2.stamped.io/api/v2/{{storeHash}}/dashboard/reviews/?search={{customerEmail}}' \ --header 'Authorization: Basic {{token}}' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'productIds=1' \ --data-urlencode 'productIds=6549921987'

 

Cart

We will use Bigcommerces' Management APIs.

To use Bigcommerces' native checkout, we need to retrieve the embedded checkout url with cart APIs.

To get cart redirect_urls in the response, append the following query parameter to the request URL: include=redirect_urls.
example: https://api.bigcommerce.com/stores/{store_hash}/v3/carts?include=redirect_urls

If required, there is also an API to retrieve redirect urls - https://developer.bigcommerce.com/docs/rest-management/carts/redirects#create-cart-redirect-url

Create new cart - https://developer.bigcommerce.com/docs/rest-management/carts/carts-single#create-a-cart

API returns cart ID in response. This ID is also the checkout ID. Store this payload on frontend for completing checkout flow.

custormer_id - Pass in customer ID to checkout as existing customer. For guest users pass in 0 or omit field.

channel_id - Pass in channel ID to create cart for specific storefront (in case of multiple channels). Default channel is 1 .

If selected items are variants, add variant ID as well.

{ "customer_id": 0, "channel_id": 1, "line_items": [ { "quantity": 2, "product_id": 126, "variant_id": 100, } ], "locale": "en-US" }

Get existing cart - https://developer.bigcommerce.com/docs/rest-management/carts/carts-single#get-a-cart

Retrieve a cart by cart ID.

 

Add item in cart - https://developer.bigcommerce.com/docs/rest-management/carts/items#add-cart-line-items

Add an item/product to existing cart. If selected item is a variant, add variant ID as well.

{ "line_items": [ { "quantity": 2, "product_id": 77, "variant_id": 100, } ] }

 

Update item in cart - https://developer.bigcommerce.com/docs/rest-management/carts/items#update-cart-line-item

Currently, only updating list_price(this is optional to add custom pricing and generally should not be used) and quantity are supported. Updating a product’s list_price will make that item ineligible for V3 product-level promotions.

If a variant needs to be changed or updated, the product will need to be removed and re-added to the cart with the correct variants using the Add Cart Line Items endpoint.

 

Delete item in cart - https://developer.bigcommerce.com/docs/rest-management/carts/items#delete-cart-line-item

Removing the last line_item in the cart deletes the cart.

 

Update customer ID - https://developer.bigcommerce.com/docs/rest-management/carts/carts-single#update-customer-id

Update a cartʼs customer_id.

 

Add/remove coupon to cart/checkout - https://developer.bigcommerce.com/docs/rest-management/checkouts/checkout-coupons#add-coupon-to-checkout

Adds a coupon type promotion to cart/checkout. Since cart and checkout are the same in Bigcommerce, we will use the checkout coupon APIs to add/remove coupons.

 

Checkout - Embedded

https://developer.bigcommerce.com/stencil-docs/customizing-checkout/open-checkout-quick-start https://developer.bigcommerce.com/api-docs/storefronts/embedded-checkout/embedded-checkout-overview

We will use Bigcommerce Open Checkout (checkout.js). This is their native checkout as open source, allowing us to customize it to our requirements.

Further more we will use this customized checkout as an embedded checkout. The will allow us to show the native checkout on our own domain within an iframe.

 

Embedded Checkout Setup

https://developer.bigcommerce.com/api-docs/storefronts/embedded-checkout/embedded-checkout-tutorial

  1. Create new Channel - (only required once)
    To use the embedded checkout on a headless storefront, the storefront needs to be hosted on its own channel. This is a one time step when setting up a new headless store. (see document for details)

  2. Create Cart
    When creating cart, use the channel ID assigned to the storefront. (provided in step 1).

  3. Redirect URL
    Retrieve redirect url from cart. (see cart section for details)

  4. Embed Checkout - Checkout SDK - Guest
    Using Bigcommerce checkout SDK embedCheckout(), we will embed our checkout using the redirect url retrieved in step 3. This will be done after redirecting to the appropriate page.
    https://github.com/bigcommerce/checkout-sdk-js/blob/master/docs/README.md#embedcheckout

    embedCheckout({ url: {{redirect_url}}, containerId: {{iframe_container_id}}, onSignOut: () => { //trigger when customer signs out from within checkout. Since the cart is emptied when a signed in user signs out, user needs to be redirected to appropriate page// router.push(`/`); }, })

    To embed the iframe, a container tag ID needs to be provided. This can be any sort of HTML tag e.g. <div></div>

  5. Embed Checkout - Checkout SDK - Signed In
    To use checkout as a signed-in user, we need to create a JWT token and then the url https://{{store-url}}/login/token/{{token}} within the Checkout SDK embedCheckout()method.
    Create JWT Token - https://developer.bigcommerce.com/api-docs/storefront/customer-login-api

    { iss: clientId, iat: dateCreated, //current time jti: uuidv4(), operation: "customer_login", //static string store_hash: storeHash, customer_id: customerId, channel_id: channelId, redirect_to: redirectUrl }

    A token will be returned.

    Embedded checkout payload

    embedCheckout({ url: https://{{store-url}}/login/token/{{JWT_token}}, containerId: {{iframe_container_id}}, onSignOut: () => { //trigger when customer signs out from within checkout. Since the cart is emptied when a signed in user signs out, user needs to be redirected to appropriate page// router.push(`/`); }, })

 

Wishlist

Bigcommerce manages its own wislists using both GraphQL and Management APIs.

Wishlists can only be created for an existing customer. Each customer can have multiple wishlists.


Wishlist graphQL APIs

The graphQL APIs for wishlist can only be used as server-to-server APIs since they require a customer impersonation token. (see graphQL APIs for details)

The following wishlist mutations are possible:

mutation wishlist { wishlist { createWishlist { ...CreateWishlistResultFragment } addWishlistItems { ...AddWishlistItemsResultFragment } deleteWishlistItems { ...DeleteWishlistItemsResultFragment } updateWishlist { ...UpdateWishlistResultFragment } deleteWishlists { ...DeleteWishlistResultFragment } } }

Refer to https://developer.bigcommerce.com/graphql-api-reference#mutation-wishlist for complete details.

 

Wishlist management APIs

These APIs are used server-to-server. (see management APIs for details)

Create wishlist - https://developer.bigcommerce.com/docs/rest-management/wishlists#create-a-wishlist

Get customer wishlist - https://developer.bigcommerce.com/docs/rest-management/wishlists#get-all-wishlists

Add item in wishlist - https://developer.bigcommerce.com/docs/rest-management/wishlists/wishlists-items#add-wishlist-item

Delete item in wishlist - https://developer.bigcommerce.com/docs/rest-management/wishlists/wishlists-items#delete-wishlist-item

 

 

Identity

Customer Account Management

Customer account management will be handled through Bigcommerce. Customer data will not be synced across Bigcommerce stores; each store will have its own set of customers.

Customer management will be handled by Bigcommerce Management APIs on frontend.

Required fields for new customer creation

  • customer fields

    • last name

    • first name

    • email

  • customer address fields

    • first name

    • last name

    • city

    • country code

    • address1


Additional fields

Any additional fields required by L’azurde customers not available in customer API can be created using create customer attribute endpoint.

Attributes must be created BEFORE creating a customer. This is a one time requirement. Attributes are global and not customer specific.

To update an existing customers attribute value, use the update customer attribute values endpoint.

Refer to the document for implementation and API details.

Required APIs:

Customer Management

Create customer - https://developer.bigcommerce.com/docs/rest-management/customers#create-customers

Update customer - https://developer.bigcommerce.com/docs/rest-management/customers#update-customers
can not update customer attribute values.

Delete customer - https://developer.bigcommerce.com/docs/rest-management/customers#delete-customers

Customer Attribute

Create customer attribute - https://developer.bigcommerce.com/docs/rest-management/customers/customer-attributes#create-a-customer-attribute

Update customer attribute - https://developer.bigcommerce.com/docs/rest-management/customers/customer-attributes#update-a-customer-attribute

Delete customer attribute - https://developer.bigcommerce.com/docs/rest-management/customers/customer-attributes#delete-customer-attributes

Customer Attribute Values

Upsert attribute values - https://developer.bigcommerce.com/docs/rest-management/customers/customer-attribute-values#upsert-customer-attribute-values

Customer Log-in/log-out

We can use Bigcommerce GraphQL APIs to login/logout customers.

On successful login, the API returns customer data. This data should be stored to on the frontend to verify that customer is logged in.

On logout, customer data should be removed from the frontend.

Required APIs:

Log in - https://developer.bigcommerce.com/graphql-api-reference#mutation-login

Log Out - https://developer.bigcommerce.com/graphql-api-reference#mutation-logout


Customer Address Management

Get all addresses - https://developer.bigcommerce.com/docs/rest-management/customers/customer-addresses#get-all-customer-addresses

Get all addresses for a given customer. Need to filter by customer ID in query.

Create new address - https://developer.bigcommerce.com/docs/rest-management/customers/customer-addresses#create-a-customer-address

Create a new address for an existing customer.

Update existing address - https://developer.bigcommerce.com/docs/rest-management/customers/customer-addresses#update-a-customer-address

Update an existing address for an existing customer. Requires address ID

Delete existing address - https://developer.bigcommerce.com/docs/rest-management/customers/customer-addresses#delete-a-customer-address

Delete an existing address for an existing customer. Requires address ID

Set default address

Currently there is not option to set a default address through the address APIs.

However if needed, we can save the address ID of the default address within a customer attribute. (see customer attribute section for API details)

 

List of Storefront Pages

  • L'azurde, MissL' and Waves Brand landing Pages

  • L’azurde, MissL' and Waves PCP Pages

  • L’azurde, MissL' and Waves PDP Pages

  • L’azurde, MissL' and Waves PLP Pages

  • L’azurde, MissL' and Waves Store location popup

  • Search Page

  • Search Results

  • My account sidebar

  • Sign up

  • My Account Dashboard 

  • My orders

  • Order detail

  • My wish list

  • Address book

  • Account information

  • Stored payments methods

  • Newsletter subscriptions

  • Back in stock subscription

  • My gift card

  • Sign In / Sign out

  • My review

  • Forgot password

  • Change password

  • Create an account

  • Checkout flow

  • Main cart

  • Side bar card / Mini Cart

  • Ancillary Pages

    • Terms and condition

    • Return policy

    • Digital receipt

    • Heritage

    • Celebrities Choice

    • In the Press

    • Customer Service

    • FAQ

    • IR Home Page

    • Fact Sheet

    • Prospectus

    • Financial Information

    • Stock Information

    • Dividends

    • Announcements

    • Financial Calendar

    • Email Subscription Centre

    • Corporate Governance

    • Contact IR

    • About page

    • Contact us page

  • Error page / 404 page

  • Validation UI

  • Pop Ups

URL Structure

We will be using following folder/directory structure to display the L’azurde, Miss’L and Waves brand landing page and these will be XM driven pages with multiple versions based on region and language

URL Structure for Home Pages

lazurde.com/en-sa lazurde.com/ar-sa lazurde.com/en-eg lazurde.com/ar-eg lazurde.com/en-ae lazurde.com/ar-ae lazurde.com/en-sa/waves lazurde.com/ar-sa/waves lazurde.com/en-sa/missl lazurde.com/ar-sa/missl lazurde.com/en-eg/missl lazurde.com/ar-eg/missl lazurde.com/en-ae/missl lazurde.com/ar-ae/missl

As of now we are dealing with two languages enandar which represents English and Arabic respectively, Furthermore, sa stands for Saudi Arab,aestands for United Arab Emirates and eg stands for Egypt.

For Example:

  • By Entering URL lazurde.com/ar-sa in browser you will get the Home page of L’azurde website for Saudi Arab region in Arabic version

  • If you write lazurde.com/ar-eg/Wavesjewelry in your browser it will display the main website of Egypt region’s Waves jewelry's with Arabic version.

  • The lazurde.com/en-ae/missl will shows the Landing page of Miss'L’s English version of United Arab Emirates’s website

For Product Listing Page we will concatenate the /c/category_name with base URL and call the Bloomreach API with the following information in payload

  • Category name

  • Region

  • Language

  • Brand name (Waves, missl and will be added later)

URL Structure for PLP’s

lazurde.com/en-sa/c/example_category lazurde.com/ar-sa/c/example_category lazurde.com/en-eg/c/example_category lazurde.com/ar-eg/c/example_category lazurde.com/en-ae/c/example_category lazurde.com/ar-ae/c/example_category lazurde.com/en-sa/waves/c/example_category lazurde.com/ar-sa/waves/c/example_category lazurde.com/en-sa/missl/c/example_category lazurde.com/ar-sa/missl/c/example_category lazurde.com/en-eg/missl/c/example_category lazurde.com/ar-eg/missl/c/example_category lazurde.com/en-ae/missl/c/example_category lazurde.com/ar-ae/missl/c/example_category

For Product Description Page we will concatenate the /p?sku=example_sku or /p/example_sku with base URL and pass the following to BigCommerce API payload

  • SKU

URL Structure for PDP’s

lazurde.com/en-sa/p/example_sku lazurde.com/ar-sa/p/example_sku lazurde.com/en-eg/p/example_sku lazurde.com/ar-eg/p/example_sku lazurde.com/en-ae/p/example_sku lazurde.com/ar-ae/p/example_sku lazurde.com/en-sa/waves/p/example_sku lazurde.com/ar-sa/waves/p/example_sku lazurde.com/en-sa/missl/p/example_sku lazurde.com/ar-sa/missl/p/example_sku lazurde.com/en-eg/missl/p/example_sku lazurde.com/ar-eg/missl/p/example_sku lazurde.com/en-ae/missl/p/example_sku lazurde.com/ar-ae/missl/p/example_sku

URL Structure for Search

lazurde.com/s/keyword=example_search_keyword

As we are using the same co-pilot for three brands so the common modules will be covered using the following directory structure

lazurde.com/account lazurde.com/cart lazurde.com/checkout lazurde.com/wishlist lazurde.com/orders lazurde.com/register lazurde.com/login lazurde.com/forgot_password lazurde.com/reviews lazurde.com/payment_methods lazurde.com/gift_cards

All types of Static / Ancillary pages are not changing based on the region so we are not suppose to use the region switch in URL but we will change the page based on language. So, we will have the following folder structure and these pages will be XM driven with multiple version support

lazurde.com/ar/content/return-policy lazurde.com/en/content/return-policy lazurde.com/ar/content/digital-recipt lazurde.com/en/content/digital-recipt lazurde.com/ar/content/terms-and-condition lazurde.com/en/content/terms-and-condition lazurde.com/ar/content/heritage lazurde.com/en/content/heritage lazurde.com/ar/content/celebrities-choice lazurde.com/en/content/celebrities-choice lazurde.com/ar/content/in-the-press lazurde.com/en/content/in-the-press lazurde.com/ar/content/customer-service lazurde.com/en/content/customer-service lazurde.com/ar/content/faq lazurde.com/en/content/faq lazurde.com/ar/content/ir-home-page lazurde.com/en/content/ir-home-page lazurde.com/ar/content/fact-sheet lazurde.com/en/content/fact-sheet lazurde.com/ar/content/prospectus lazurde.com/en/content/prospectus lazurde.com/ar/content/financial-information lazurde.com/en/content/financial-information lazurde.com/ar/content/email-subscription-centre lazurde.com/en/content/email-subscription-centre lazurde.com/ar/content/corporate-governance lazurde.com/en/content/corporate-governance lazurde.com/ar/content/contact-ir lazurde.com/en/content/contact-ir lazurde.com/ar/content/about-page lazurde.com/en/content/about-page lazurde.com/ar/content/contact-us lazurde.com/en/content/contact-us lazurde.com/ar/content/store-location-lazurde lazurde.com/en/content/store-location-lazurde lazurde.com/ar/content/store-location-waves lazurde.com/en/content/store-location-waves lazurde.com/ar/content/store-location-missl lazurde.com/en/content/store-location-missl lazurde.com/en/content/404

All brands comes under the L’azurde domain (For Phase -I) afterwards the brand will be hosted on the their own domains such as lazurde.com/ar-ae/missl will redirect to the missl.com/ar-ae and a common cart/checkout (cart.lazurde.com) will be implemented to sync the data.

 

 

 

Front-end Sequence Diagrams

Online Create Basket

 

Online Click and Collect

 

 

Online Reserve and Collect

 

Online Delivery and Scheduling

 

Online Transaction

 

Middleware (External Service)

A NodeJS middleware will be implemented that will act as a BFF (back-end for front-end) for storefront. The middleware will primarily act as a server for making payment gateway API calls for BNPL methods. Middleware will provide the endpoint to FE team according to the FE team requirement then FE team will use this endpoint to fulfillment of BNPL methods implementation. This activity will avoid to expose the keys of BNPL methods. Each BNPL methods have there own endpoint in Middleware.

3rd Party Integrations

Other than core system components (Bloomreach, Plytix and BigCommerce), the storefront will directly integrate with following 3rd parties,

  • Whatsapp Chat - for customer support

  • Euroland - for showing realtime shares information

  • Tabby - BNPL for KSA and UAE

  • Tamara - BNPL for KSA and UAE

  • ValU - BNPL for EG

  • Checkout.com - payment gateway

  • Apple Pay - for payments via Apple Pay wallets

  • Google Analytics 4 (GA4) - for Analytics

  • Bambuser - for live selling

  • Tangiblee - for virtual try on

Data Migration From Magento

The existing data of L’azurde customer, products, Wishlist, Order information, and Reviews will be migrated from the existing L’azurde’s Platform with the following process. There are type of data that are migrate from Magneto

  • Order Data History

  • Product Data History

  • Customer Data History

  • Review Data History

  • Wishlist Data History 

Order Data History

  • Order data history is received from magneto in excel format files after that using JS script get order data in json form after that map it according to this order import api

curl --location 'https://api.bigcommerce.com/stores/r89pr1d3as/v2/orders' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: dckpx004o0kss70zkm5sjdjz0vkupxk' \ --data-raw '{ "billing_address": { "first_name": "Jane", "last_name": "Doe", "street_1": "123 Main Street", "city": "Austin", "state": "Texas", "zip": "78751", "country": "United States", "country_iso2": "US", "email": "janedoe@email.com" }, "products": [ { "name": "BigCommerce Coffee Mug", "quantity": 1, "price_inc_tax": 50, "price_ex_tax": 45 } ] }'

Attributes require

1- Billing Address

  • first_name

  • last_name

  • street_1

  • city

  • state

  • zip

  • country

  • country_iso2

  • email

2- Products

  • name

  • quantity

  • price_inc_tax

  • price_ex_tax

Strategy

migration of data is process store by store like (KSA, UAE, AND EGP). before run Orders must all record of Customer and Product import in system for all store. When migration start for one store extract all data from excel file into json after that run migration during migration system maintain Three file of Json. All the migration script are manually run on system and monitor by developer.

Complete Migrated Records

this file maintain only recode that are completely migrate means all customer and product id,s are available in system.

Partial Migrated Records

this file maintain only records that are partially migrate means all Customer are available but product are partially available like there are 3 product in Wishlist but 2 product id,s are avail and 1 product id,s are not available.

Not Migrated Records

this file maintain only records that are not migrate means all customer or product that are in record not found in system and also maintain records that not migrate due to some reason. Which records that are not migrate due to any system reason write in this json file with reason that api retune in response. if the reason is fixable then fix the reason and migrate again and if reason not fixable then prepare the file and send it to relevant person.

Product Data History

Product data history is received from magneto in excel format files after receiving data format data according to the given template of big commerce bulk import csv after this when data prepare according to given template directly import into dashboard of big commerce. Here is link of import

https://store-lbnxxoq07g.mybigcommerce.com/manage/products/import?step=1

and here is documentation link

https://support.bigcommerce.com/s/article/Importing-Exporting-Products?language=en_US#product-import

after this email

we already explain how product migrate from plytix to BigCommerce in this section Product feeding

Attributes require

all data should b available in plytix system accordingly

Strategy

migration of data is process store by store like (KSA, UAE, AND EGP). When migration start for one store extract all data from plytix through search product api into json after that run migration during migration system maintain two file of Json. All the migration script are manually run on system and monitor by developer.

Complete Migrated Records

this file maintain only recode that are completely migrate from plytix to BigCommerce system.

Not Migrated Records

this file maintain only records that are not migrate due to some reason. Which records that are not migrate due to any system reason write in this json file with reason that api retune in response. if the reason is fixable then fix the reason and migrate again and if reason not fixable then prepare the file and send it to relevant person.

 

Customer Data History

Customer data history is received from magneto in excel format files after that after that using JS script get Customer data in json form after that map it according to this Customer import api

curl --location 'https://api.bigcommerce.com/stores/r89pr1d3as/v3/customers' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: dckpx004o0kss70zkm5sjdjz0vkupxk' \ --data-raw '[ { "email": "string@example.com", "first_name": "string", "last_name": "string", "company": "string", "phone": "string", "notes": "string", "tax_exempt_category": "string", "customer_group_id": 0, "addresses": [ { "address1": "Addr 1", "address2": "", "address_type": "residential", "city": "San Francisco", "company": "History", "country_code": "US", "first_name": "Ronald", "last_name": "Swimmer", "phone": "707070707", "postal_code": "33333", "state_or_province": "California", "form_fields": [ { "name": "test", "value": "test" } ] } ], "authentication": { "force_password_reset": true, "new_password": "string123" }, "accepts_product_review_abandoned_cart_emails": true, "store_credit_amounts": [ { "amount": 43.15 } ], "origin_channel_id": 1, "channel_ids": [ 1 ], "form_fields": [ { "name": "test", "value": "test" } ] } ]'

Attributes require

1- Basic Info

  • email

  • first_name

  • last_name

  • phone

  • company

2- Address

  • address1

  • address_type

  • city

  • company

  • country_code

  • first_name

  • last_name

  • phone

  • postal_code

Strategy

migration of data is process store by store like (KSA, UAE, AND EGP). When migration start for one store extract all data from excel file into json after that run migration during migration system maintain two file of Json. All the migration script are manually run on system and monitor by developer.

Complete Migrated Records

this file maintain only recode that are completely migrate in BigCommerce system.

Not Migrated Records

this file maintain only records that are not migrate due to some reason. Which records that are not migrate due to any system reason write in this json file with reason that api retune in response. if the reason is fixable then fix the reason and migrate again and if reason not fixable then prepare the file and send it to relevant person.

 

Review Data History

Review data history is received from magneto in excel format files after that format to given template of csv from http://Stamped.io

format data accordingly and directly import into http://Stamped.io in bulk format. Here is link of import

  • https://go.stamped.io/v3/#/settings/importer/reviewrequests

Wishlist Data History

Wishlist data history is received from magneto in excel format files after that extract into json format. Before using Create Wishlist Api using get Customer by email api

curl --location 'https://api.bigcommerce.com/stores/r89pr1d3as/v2/customers?email=arsal.waseem%40shopdev.co' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: dckpx004o0kss70zkm5sjdjz0vkupxk'

to get Customer Id after that using get product by sku Api to get product id

curl --location 'https://api.bigcommerce.com/stores/r89pr1d3as/v3/catalog/products?sku=SM-13' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: dckpx004o0kss70zkm5sjdjz0vkupxk'

then using create api of Wishlist to migrate the record one by one here is create Wishlist api

curl --request POST \ --url 'https://api.bigcommerce.com/stores/[store_hash]/v3/wishlists' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: xxxxxxxxxxxxxxxxx' \ --data '{"customer_id":12,"is_public":false,"name":"School Shopping","items":[{"product_id":12,"variant_id":152}]}'

Attributes require

  • Email

  • Product sku

  • Description

Strategy

migration of data is process store by store like (KSA, UAE, AND EGP). before run Wishlist must all record of Customer and Product import in system for all store. When migration start for one store extract all data from excel file into json after that run migration during migration system maintain three file of Json. All the migration script are manually run on system and monitor by developer.

Complete Migrated Records

this file maintain only recode that are completely migrate means all customer and product id,s are available in system.

Partial Migrated Records

this file maintain only records that are partially migrate means all Customer are available but product are partially available like there are 3 product in Wishlist but 2 product id,s are avail and 1 product id,s are not available.

Not Migrated Records

this file maintain only records that are not migrate means all customer or product that are in record not found in system and also maintain records that not migrate due to some reason. Which records that are not migrate due to any system reason write in this json file with reason that api retune in response. if the reason is fixable then fix the reason and migrate again and if reason not fixable then prepare the file and send it to relevant person.

Deployment Infrastructure

The website front-end to be hosted on Vercel. Front-end for dev, qa, uat and prod to be hosted on separate Vercel environments. API secrets for lower environments to be added on relevant environments as environment variables.

Middleware (external service) to be hosted on AWS ec2.

Branching & Deployment Strategy

  • Lint pre-commit checks to be ensured

  • There would be 4 major branches.

    • develop: the branch where developers are committing their code on daily basis and it is developers’ responsibility to keep this branch stable

    • qa: he branch where QA will test and report the bugs so developers can fix and re-deploy

    • stage: Once QA passed code will be merged into UAT. The branch is a replica of production with the exact same build and data to ensure smooth rollouts and prod experience on lower environment

    • prod: the live environment.

  • CI pipelines are to be run before branches can be merged. CI/CD pipeline consists of the following stages:

  • No code would move forward from develop branch until unit tests are passed

  • When new tickets are assigned to a developer, a QA engineer will write test cases for those tickets

  • No code can be merged into production until the corresponding ticket is marked as QA verified

For version control management practice Trunk based development will be used where developers will merge small frequent updates to a core trunk or main branch. So, continuous integration / continuous delivery will be part of deployments pipeline and unit tests will be run before build and API tests and UI/UX testing will run after successful build.

Codebase Hosting

The front-end and external service (middleware) codebase would be hosted on github. Repositories for both would be created under Shopdev/Shopistan organization on github.

 

Rollout / Rollback Strategy

Roll Out Strategy

  • The feature completed / bug fixed will be 1st tested on dev env by developer himself and then merged to QA

  • QA will perform integration and regression testing

  • Once internal testing is complete and code reviews are done, it will be released to the production environment

  • For FUTURE FEATURES, rolling out of releases will be done during a rollout time slot that will be mutually agreed, by the client indicating when customer usage of the system is lowest.

Rollback Strategy

  • For FUTURE FEATURES, if we release a feature/version that needs to be rolled back, we will switch to a stable commit id or tag and re-run the release cycle

Test Plan

Overview

Every perfect operation needs proper planning and here, we are going to explain how we will play a testing role throughout the project development. The test plan will explain at what point we need to switch our gear and utilize different testing strategies such as performance, load, and automation testing.

Purpose of the Document

This document is intended to address and describe the features and functionality of the project. Here are the points proving the importance of this document:

  • It will describe the functionality and requirements of the project

  • It will have a detailed description of how the application will be tested throughout the various levels of testing in the development cycle.

  • It will have brief notes about testing environments and testing strategies.

  • It will describe the entry and exit criteria for a tester

  • It will describe how to carry out tests and record the respective results.

  • How the requirements will be demonstrated by a series of test cases that may be derived from user scenarios

  • It will have a list of tools and techniques that will be used during the testing cycle.

  • It will demonstrate how to report bugs including what is required to report a bug and how to keep track of that bug.

Quality Objectives

The success of a product/project is based on its quality. If the quality of the product is very good then the product is considered to be a successful product. So our main objective is to ensure the quality of the product should be high in all metrics. Here is the list of quality objectives:

  • Ensure that added functionality is fulfilling the functional and non-functional requirements.

  • Ensure the front-end design is according to the requirement and fulfilling the acceptance criteria.

  • Ensure that the BE is working as expected.

  • Ensure that one function is not disturbing another module.

  • Ensure that APIs are working properly and are not available for unauthorized person/access.

  • Ensure that bugs are fixed and working smoothly before going live/UAT.

  • Ensure that the system can handle a no. of users at a time and will not crash in uncertain circumstances.

  • Ensure that all modules of the system in their best performance

Infrastructure Requirements

Following are the infrastructure requirements for successful execution of Testing:

  • A good quality internet connection

  • A good quality LAN or Wi-Fi connectivity

  • Uninterrupted power supply for smooth execution of testing activities

  • Reliable/Consistent access to the Google Virtual Machines to execute Load Testing

  • All the required Environment and Databases are accessible with the given credentials

  • All the systems (which will be used by the Test team) are updated with the latest windows updates and patches. Installation of all the updates needs to be planned during off-hours.

Scope of Functionality

We have several functionalities in our project on which we will impose manual testing, load/performance testing, and automation testing. Here is the list of functionalities included in our scope of testing.

Feature

Description

Feature

Description

Sign Up

Users should be able to Sign Up using a Unique email

Log In

Users should be able to log in using their email

  • User should be able to login any time during browsing the website

  • User should be able to login on checkout page

Forget Password

Users should be able to reset passwords using Forgot password functionality

Reset Password

User should be able to reset my password on the website so that to access account with new password

Multi-Client

User should be able to browse and place orders based on the region/brand so that, Invoice is generated based on the region/brand selected.

Multi-Brand

User should be able to switch between different brands which may or may not fall under the same domain. However, each brand will have their own look and feel in terms of UI. However, UX will be somewhat similar

Multi-Tax

User should be charged with tax according to region selected so that, invoice reflects the tax of the region shopped on

Multi-Lingual

User should be able to switch between English & Arabic languages while browsing through the website

QR Code for Electronic invoices

QR Code should be generated on all the Electronic invoices across all the merchants in KSA. On QR code scan, invoice related information should be displayed.

Multi-Pricing

Product pricing should be based on the store region selected

  • The pricing for the region to be configured on PIM

Multi-Currency

Currency shown with product pricing should be based on the store region selected

Cross pollination of products / Products availability on Home/Master website

All brands products should be visible on main L’azurde website whether they have their own website or not. User should be able to shop all the products on the main website without switching to the respective child brand website.

Product Listing Pages PLP’s

User should be able to go product listing page through

  • Category Bar

  • Hero Section

  • What’s Trending Section

  • What’s New Section

  • Shop by Category section

  • Live Selling section

  • Best Sellers section

  • Explore L'azurde section

  • Search Results

  • Explore All Products in L’azurde

Following Information must be visible on product listing pages

  • Category Title

    • Subcategory Buttons

  • Breadcrumb Navigation

  • Filters Buttons

  • Sort By Option

  • Pagination

  • Products List

  • Page Change Button

  • Product ribbons/tags

  • Out of Stock

  • Add to cart

  • Add to Wishlist

Product Description Pages PDP’s

User should be able to go on product description page through

  • Products listed on the Homepage or other Ancillary pages

  • Products listed on the Product Listing pages

Following information should be visible on product detail page

  • Breadcrumb Navigation

  • Product Media, Video of product , 360 View of product by video

  • Product Content

  • Product ribbons, tags

  • Alternative products if product is sold out

  • Product Recommendations

  • Recently viewed Products

  • In stock alert

  • Promotion Display

  • Sound alert on add item to cart

Static Pages

User should be able to browse help pages on website for L’azurde products

  • About Us: Details about L’azurde and their business

  • Contact Form: Information to contact L’azurde stores

  • L’azurde Policies: Terms and conditions of L’azurde

  • Order & Returns: A static page related to order and returns

  • Customer Service: Information about effective communication between the company and investors

  • Governance and Investor Relations: Pages and stock information coming from Euroland

  • Celebrities Choice: Page related to endorsements from celebrities

  • In the Press: Page related to press information for L’azurde

Moreover, Admin user to configure static landing pages on the website for user navigation

Dynamic Pages

User should be able to browse website dynamic pages and place order

  • Category Page: To browse products via categories and place an order

  • Campaign Page: To browse products via Campaigns and place an order

Error Handling

  • User should be shown error pages in case of errors on the website

  • 404 landing page should be shown in case of unavailable pages, page doesn't exist or access failure, with the following information:

    • Error message: "Whoops, our bad :(\nThe content you requested was not found."

    • CTA to Go Back to the previous page (On click, user to be taken back to the previous page they were browsing)

    • CTA to Store Home (User to be taken to the Store Homepage)

    • CTA to My Account (User to be taken to the My Account dashboard)

  • Error page should be shown to handle generic technical errors (Microservice down, etc.)

  • Outage page should be shown during outages

  • Traffic should be redirected to this page during technical maintenance, system upgrades, and release in progress

Home Page Offers

User should be able to have

  • Access to New In and Sales offers on the website homepage to browse and place orders

  • Seasonal campaigns on Hero section and Top Bar to browse and place orders

Custom Pages

Admin user should be able to create and publish custom static pages for marketing purposes from Bloomreach Content CMS

Website Header

User should be able to view website header on the L’azurde website and access key information

  • Display brand title according to the Brand selected

  • Display Promotion banner, if the website has any promotion going on

  • For the first time user, Language and Region bar to appear

  • Top Menu Bar

    • Shop by Boutique

    • Store Locator

    • Region and Language selector

    • My Account Icon

    • Wishlist

    • Cart

  • Category Bar

    • Brand Logo

    • New In

    • Jewellery

    • Diamonds

    • Bridal

    • Gifts

    • Live Events

    • Search Bar

  • Standard header across all pages on the website other than Checkout and Thank you page should be visible

  • An ability for the menu expand on hover or tap with animations

Website Footer

User should be able to see a website footer at all times to view information related to L’azurde

  • Sign Up/Sign In. On click, user to be taken to Sign Up/Sign In screen

  • Social Platform Links

    • Instagram

    • Facebook

    • Pinterest

    • Twitter

    • YouTube

  • Customer Service Section

    • Contact Us

    • FAQ

    • Store locations

  • Services section

    • Sale permit

    • Terms and Conditions

    • Warranty

  • L’azurde World

    • About L’azurde

    • Heritage

    • Celebrities Choice

    • Governance and Investor Relations

  • Maroof QR Code

  • Language and Region selection

    • Country dropdown: On select, website to be changed according to the selected country

    • Language dropdown: On select, website to be changed according to the selected language

  • Payment Options references

    • Tabby

    • Apple Pay

    • Visa

    • Mada

    • Tamara

  • Popular Categories (Under Discussion)

  • Footer should be visible on all pages expect Checkout and Thank you page

One Account across all brands

User should be able to register on the L’azurde website so that user can log in and place orders on the website for all the brands for that region only

Common Checkout

User should have a common checkout functionality on the website so that to place an order for all the brands in one place.

  • The Common Checkout should only be valid in the same region

  • User to only add address of the region of the website they are in

Promotions on the Checkout

User should be able to add different Promotions on order

Multi-payment Methods

User should be able to pay with his/her choice

  • Cash on Delivery

  • Visa

  • Tabby

  • Tamara

  • Valu

  • Apple Pay

Global Search

User should be able to have a search preview on the website so that able to perform search and add products to cart

  • Admin user should be able to configure search settings so that, User can have accurate search results

Mini Cart

User should be able to have a Mini Cart view on the website header to view cart information right away

Wishlist

User should be able to Add products to Wishlist on the Product Listing Page to make purchase later. Wishlist should be unified across all brands so that, When user go to My Wishlist, it should show all products.

Wishlist will only show products of the region the user is logged in

Product Reviews

Users should be able to review the products they have purchased on the product’s PDP and through their Orders history page

Notifications

User should be able to get notifications for

  • Registration Confirmation

  • Order State Notifications

  • Subscription Notifications

  • Cart Abandonment

Notifications can be

  • Notifications via SMS (Dependent on Flow OMS)

Integrations

For a complete E-commerce solution, necessary 3rd Party Integrations would be implemented to have a seamless experience

Tab Navigation

User should be able to navigate through Tab navigation on the website for accessibility

Immersive Experience

  • User should be able to have a Virtual Try on a product

  • User should be able to have a Live selling feature on the website so that to get information live on products and campaigns

Order Management

  • User should be able to get home delivery

    • The system requires an ability to have Click and Collect order on the website

    • The system requires an ability for the Customer to request cancellation for their order

    • The system requires an ability to cancel orders that are out of stock

Returns Management

  • User should be able to return products

    • The system requires an ability for customer to process returns from the Website

    • The system requires an ability for the Customer to initiate return request via Call center

    • The system requires an ability for the Customer to return items in store via POS

    • The system requires an ability to cater Failed Deliveries from 3PL Returns

Omni Channel

User should be able to collect orders by

  • Reserve and Collect

  • Click and Collect

  • Multi Site fulfillment

  • Ship from Store

Responsive Design

Website should be device responsive. At least 3 breakpoints (desktop, tablet, mobile) supporting Chrome, Safari, Edge, Firefox & Opera

Localization & Time zones

Website should be operate based on location so that, promotions and orders are aligned according to user time zone

Store Locators

User should be able to go to the Store Locator page to view stores list and navigate to them

User Management

Admin should be able to manage User access to create users and assign roles and permissions (from respective tool of each platform)

Account Management

User should be able to register on the L’azurde website to log in and place orders for all the brands for that region

Login should only work for same region.

  • user should be able to create account through sign up button in side bar

  • User should be able to create account before ordering

  • User should be able to create account during ordering

User should be able to update profile information on My Accounts section.

Account Creation Failure

The user to be shown error message based on incorrect registration information for the following:

  • Validation Errors

    • Highlight field with errors

  • Email Verification Failed

  • Account already exists

Existing Users Accounts

  • Existing Magento users should be able to sign in by resetting password

My Account

  • User should able to Add/Update Payment methods on my account to use those methods while ordering

  • User should be able to manage address on my account to use updated addresses while ordering

  • User should be able to opt-in/opt-out of marketing notifications to receive notifications according to preferences

  • User should be able to view my Order details on my account to view my order history and active orders

  • User should be able to request for order cancellation

  • User should be able to provide review and ratings for orders to provide feedback about my order or products ordered

Link Social Accounts

User should be able to link social profile, My Facebook or Instagram, to My Account

Audit Trail & logging

Admin should be able to view Audit Trail log

SEO

Robots.txt should be created in correct format and published after every 24 hours

Data Migration

Data migration should be handled accordingly

  • Products (By L'azurde)

  • Orders (By Shopdev and L'azurde)

  • Reviews (By Shopdev and L'azurde)

  • Customers (By Shopdev and L'azurde)

  • Wishlist (By Shopdev and L'azurde)

Logout

User should be able to logout of the website to prevent unauthorized access to account

Testing Devices

Devices

OS

Version

Browsers with latest Versions

Devices

OS

Version

Browsers with latest Versions

Desktop

Windows

11 & 10

Chrome

Firefox

Edge

Opera

Mac

12.0.1

Safari

Chrome

Edge

Opera

Mobile

Android

13

Chrome

Safari

IOS

16

Chrome

Safari

Tablet /IPAD

No Design provided for tablet So, testing will only include checking the UI breakage.

Android

13

Chrome

Safari

IOS

16

Chrome

Safari

Testing Methodology

As we are following the Agile methodology, we will plan our testing according to the agile methodology. We will first analyse and understand the tickets added to the sprint. After understanding, we will start writing test cases so that we can have enough time for our testing when tickets start flowing towards QA. This methodology will save us time and we can make our testing reliable. Here are the types of testing we will be used throughout the testing process:

Unit Testing

Test Objective

The objective of the Unit test is to validate that each unit of the software code performs as expected. Normally, Unit Testing is done by the developer during the development (coding phase)

Owner

Developers will be responsible to perform Unit Testing

Technique

  • State-Based: Verifying that the application under test produces correct results, or that its resulting state is correct, is called the state-based unit testing technique

  • Interaction Based: Verifying that application under test properly invokes certain methods are called interaction-based unit testing technique

Scope of Features

All features or components which are defined under the scope of unit testing will be part of unit testing.

Entry Criteria

Feature/Functionality development is complete and ready for unit testing

Acceptance Criteria

Acceptance criteria will be defined by the product owner

Exit Criteria

  • All the designed unit tests have been executed

  • All identified issues in the unit have been addressed and corrected before delivery to QA

Tools

 Cypress / Jest / React testing library

Back-end APIs Testing

Test Objective

The objective of API Testing is to check the functionality, reliability, performance, and security of the programming interfaces

Owner

QA team will be responsible to perform API Testing

Technique

  • Testers will design a Postman collection of APIs with given URLs, methods, endpoints, headers, bodies, and attributes.

  • Testers will use environment variables

  • The development team will provide a base URL once API(s) is deployed and ready for testing

  • The tester will verify the APIs using Postman and share the findings with the development team

Scope of Features

Endpoints of all features or components will be part of API testing

Entry Criteria

Endpoints of features are created and deployed to the QA environment

Acceptance Criteria

Testing team will follow the API document provided by Dev/Business Team

Exit Criteria

All APIs are working properly; giving success or failure messages with a proper response as well as proper code

Tools

  • Postman

 Reporting

A screenshot or recording must be attached to report a bug or to mark a ticket/feature verified. In case of bug reporting, these points must be added to the ticket:

  • Description

  • Steps to Reproduce

  • Environment

  • Expected Results

  • Actual Results

Smoke Testing

Smoke Testing is a software testing process that determines whether the deployed software build is stable or not. Smoke testing confirms the stability of a feature to move further with detailed testing. It consists of a minimal set of tests run on each build to test software functionalities.

Test Objective

The main object of smoke testing is to reject a software application with bugs and don’t proceed with the detailed/functional testing

Owner

QA Team will be responsible to execute Smoke Testing

Technique

Execute a few basic test cases to verify the following:

  • The expected results occur when valid data is used

  • The appropriate error/warning messages are displayed when invalid data is used

Scope of Features

All the features or components which are defined under Scope will be part of the Smoke Testing

Entry Criteria

Given feature/functionality is Unit tested and deployed on the QA environment

Acceptance Criteria

  • All Screens UI is as per Design

  • All Critical functionalities are working properly

Exit Criteria

Basic test cases pass and functionality works in a bird’s eye view

Tools

  • JIRA (will be used for bug reporting) 

Reporting

A screenshot or recording must be attached to report a bug or to mark a ticket/feature verified. In case of bug reporting, these points must be added to the ticket:

  • Description

  • Steps to Reproduce

  • Environment

  • Expected Results

  • Actual Results

Front-end Testing (UI)

Test Objective

The objective of UI testing is to ensure that toolbars, fonts, menus, text boxes, radio buttons, checkboxes, colours, and placement of different UI components are as per the given design

Owner

QA Team will be responsible to perform UI Testing

Technique

  • Each page/section of the application will be tested according to the available design

  • The working of each UI component will be verified on each page

Scope of Features

Placement and working of all the UI components on different pages and all other features or components which are defined under Scope will be part of UI testing

Entry Criteria

We can start testing the UI when these points are matched

  • The latest UI is deployed on the QA environment

  • We have the latest design

  • Acceptance criteria are defined

  • Unit testing has been done

Acceptance Criteria

QA Team will follow the updated/latest figma design provided by business team.

Exit Criteria

  • All the UI components on intended pages are placed as per the design and working as per the requirements

  • All identified bugs have been reported, fixed, and retested

Tools

  • JIRA (will be used for bug reporting)

  • Cypress

Reporting

A screenshot or recording must be attached to report a bug or to mark a ticket/feature verified. In case of bug reporting, these points must be added to the ticket:

  • Description

  • Steps to Reproduce

  • Environment

  • Expected Results

  • Actual Results

Functional Testing

Test Objective

The objective of Functional Testing is to ensure that functionality is working fine as per software requirements.

Owner

QA Team will be responsible to perform Functional Testing

Technique

  • Each page/section of the application will be tested according to requirements

  • The functionality of all modules will be verified

  • The functionality of all modules must be according to requirements

Scope of Features

All the features or components which are defined under Scope will be part of the Functional Testing

Entry Criteria

We can start testing the functionality when these points are matched

  • The latest code is deployed on the QA environment

  • Acceptance criteria are defined

  • Unit testing has been done

Acceptance Criteria

QA Team will follow the requirement document provided by business team

Exit Criteria

  • All the functionality is working as per the requirements

  • All identified bugs have been reported, fixed, and retested

Tools

  • JIRA (will be used for bug reporting)

Reporting

A screenshot or recording must be attached to report a bug or to mark a ticket/feature verified. In case of bug reporting, these points must be added to the ticket:

  • Description

  • Steps to Reproduce

  • Environment

  • Expected Results

  • Actual Results

Sanity Testing

Sanity testing is a type of Software Testing performed after receiving a software build, with minor changes in code, or functionality, to ascertain that the bugs have been fixed and no further issues are introduced due to these changes. Sanity testing confirms the rationality of a feature to move further with more rigorous testing.

Test Objective

The main object of Sanity testing is to quickly verify that if the new functionality, change, or fix is working and has not broken down existing functionality

Owner

QA Team will be responsible to execute Sanity Testing

Technique

Execute a few basic test cases to verify the following:

  • The expected results occur when valid data is used

  • The appropriate error/warning messages are displayed when invalid data is used

Scope of Features

All the features or components which are defined under Scope will be part of the Sanity Testing

Entry Criteria

  • Given feature/functionality is Unit and Functional tested

  • All the highlighted bugs have been fixed and changes are deployed on the QA environment

Acceptance Criteria

  • All Critical functionalities are working properly after fixes

  • No ripple created in application after fixes

Exit Criteria

Basic test cases pass and functionality works in a bird’s eye view to proceed with more rigorous testing

Tools

  • JIRA (will be used for bug reporting) 

Reporting

A screenshot or recording must be attached to report a bug or to mark a ticket/feature verified. In case of bug reporting, these points must be added to the ticket:

  • Description

  • Steps to Reproduce

  • Environment

  • Expected Results

  • Actual Results

Integration Testing

Test Objective

The objective of Integration testing is to ensure that different units, modules or components of application are working fine or as per functionality required

Owner

QA Team will be responsible to perform Integration Testing

Technique

All units of application will be tested as combined entity

Scope of Features

All the features or components which are defined under Scope will be part of the Integration Testing

Entry Criteria

We can start Integration testing as

  • Unit testing of individual modules/components is complete

  • All the critical and high Priority bugs are closed

Acceptance Criteria

  • All Critical functionalities are working properly as individual as well combined

  • No ripple created in application after integration

Exit Criteria

  • Functionality is working properly as per requirements

  • All identified bugs have been reported, fixed, and retested

Tools

  • JIRA (will be used for bug reporting)

Reporting

A screenshot or recording must be attached to report a bug or to mark a ticket/feature verified. In case of bug reporting, these points must be added to the ticket:

  • Description

  • Steps to Reproduce

  • Environment

  • Expected Results

  • Actual Results

Regression Testing

Regression Testing is a black-box testing technique that is done to verify a code change in the software does not impact the existing functionality of the application. This is to make sure the application works fine with new functionality, bug fixes, or any change in the existing feature. Previously executed test cases are re-executed to verify the impact of change.

Test Objective

The objective of Regression testing is to confirm that all the features and functionalities are intact and working as per the user expectations and requirements

Owner

QA Team will be responsible to execute Regression Testing

Technique

Execute each test case, flow, or function, using valid and invalid data, to verify the following:

  • The expected results occur when valid data is used

  • The appropriate error/warning messages are displayed when invalid data is used

  • Each business rule/criteria is properly applied

Scope of Features

Features from automation scripts will be used as regression. So, almost regression will cover most of the automated scripts.

Entry Criteria

  • All the features and functionalities have been developed as per requirement and design

  • All the features are Functionally tested and deployed on the QA environment

  • All the critical and major bugs have been resolved and tested

Acceptance Criteria

All features and functionalities must work as per requirements

Exit Criteria

  • All the designed test cases have been executed

  • All identified bugs have been addressed and retested

Tools

  • Cypress

  • Playwright

Note: Further tools will be added as per requirement

Reporting

A screenshot or recording must be attached to report a bug or to mark a ticket/feature verified. In case of bug reporting, these points must be added to the ticket:

  • Description

  • Steps to Reproduce

  • Environment

  • Expected Results

  • Actual Results

Levels of Testing

It is a good approach to have a quality check at each stop of a product. It will increase the quality of the product. We are following a well-managed development flow. We will have four levels of testing:

  • Dev Testing: Developers will test their work on their local machines. Devs will be doing unit testing and if they feel they are meeting the acceptance criteria, then they will raise PRs for the dev environment.

  • QA Testing: nvironment, QA will be testing the functionality. If QA has successfully tested the tickets and passed all test cases, deployment will be made for UAT.

  • UAT Testing: After QA is done, we will be testing our functionality on the acceptance criteria according to the customer's perspective. If we are satisfied with it, we can finally go for a live release. Nothing should be deployed on UAT without confirmation from QA. Deploying without approval from QA can lead us to disaster.

  • Post Production Testing: We will be testing our newly added features or fixations on a live environment and if we are satisfied, we can say our testing is successful. Nothing should be deployed on production until approval on UAT is given from QA and the customer (whenever a customer is involved).

Entry Criteria

Testing should be started when tickets are ready to be tested and deployed on the sandbox. If APIs against required tickets are created then the APIs should be tested.

Exit Criteria

Testing should be stopped when all the test cases have been covered and there is no issue left in the features. All bugs should be reported and after validation of fixed code, respective tickets should be moved to the related state.

Training

If required by the client, ShopDev and respective vendors will provide the necessary training to use the application and how it interact with other 3rd party libraries.

Appendix

Appendix A - Checkout Flow

 

 




Appendix B - Cross Pollination Flow

 

 

Related content