Storefront Application (RC)
1.0.0-rc.10
🔥 Highlights
📡 HTTP Request tracing with OpenTelemetry
The Storefront Application now includes a built-in integration with OpenTelemetry. To enable the feature, set the environment variable OTEL_ENABLED to true. This will inject additional code into your application's entrypoint which will initialize the OpenTelemetry SDK. Automatic instrumentations as well as instrumentations from storefront-nuxt will be captured and exported via the OTLP protocol.
Currently, Vercel and Node are the only supported platforms for the OpenTelemetry integration. Setting OTEL_ENABLED to true when building for other platforms will have no effect.
You should also set the runtime variable OTEL_SERVICE_NAME to configure the service name used in traces. e.g. OTEL_SERVICE_NAME=storefront-boilerplate Note: this variable is used directly by the OpenTelemetry libraries and is not available in the Nuxt runtimeConfiguration.
🛍️ Improved UX / UI for Promotions
We've redesigned the promotion badges displayed on the Product Listing Page, the Wishlist, and the Basket page. The Badge text originates from Storefront APIs customData, with headlineParts in bold and badgeLabel in regular font. We now implement ellipsis for long badgeLabel texts.
Please Note: Due to space constraints, the basket page shows only badgeLabel; if it is missing, it will fallback to headlineParts.
We have also improved the user experience on the Product Detail page with free gift options. When the condition of a product, that has a free gift option configured, are met, a free gift option will be displayed on the page with a grayed-out overlay. Once conditions are met, a free gift option will be enabled and the user can add a free gift product to the cart.
🔍 Improved linting setup with ESLint v9
The Storefront Application now includes an improved linting setup. Relying on the new ESLint 9 and @nuxt/eslint module to provide more project-aware linting. To make configuration more easier the ESLint config has been updated to the new flat config format, allowing for simpler customization and overriding of rules. Additionally the default Storefront ESLint config @scayle/eslint-config-storefront v4 is now using a subset of opinionated rules of @antfu/eslint-config.
Minor Changes
- Added subscription cancellation page to the subscription module
 - New Price adoptions for basket page for promotions
 - Increased eslint 
no-composable-after-awaitrule error level and fix the issues - Fix caching for domain-based setups where we now consider the host for the SSR cache key.
Additionally, we now set anintegrityvalue that invalidates the SSR cache automatically when a new build is deployed. You can control the value through theVERSIONenvironment variable, which should be set to your current Git short commit sha.
Either you can set this normally during your build process
or when using the docker image 
Patch Changes
- Removed an unnecessary CSS property which caused a visual bug on basket page
 - Resolved a bug that affected the fetching of 
combineWithproducts - Resolved the issue where the welcome login tab was displayed instead of the registration tab upon clicking the register link.
 - Implemented a new utility function to format addresses dynamically. The function adjusts the address format according to the countryCode
 
🏡 Dependency Updates
🏘️ devDependencies
- Added 
"@eslint/[email protected]", - Added 
@nuxt/[email protected] - Updated to 
@nuxt/[email protected] - Updated to 
@nuxtjs/[email protected] - Updated to 
@nuxtjs/[email protected] - Updated to 
@scayle/[email protected] - Updated to 
@upstash/[email protected] - Updated to 
@vitest/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] 
🏠 dependencies
- Added 
@opentelemetry/api": "1.8.0 - Added 
@opentelemetry/auto-instrumentations-node": "0.45.0 - Added 
@opentelemetry/exporter-trace-otlp-proto": "0.51.0 - Added 
@opentelemetry/instrumentation": "0.51.0 - Added 
@opentelemetry/resources": "1.24.0 - Added 
@opentelemetry/sdk-node": "0.51.0 - Added 
@opentelemetry/semantic-conventions": "1.24.0 - Added 
@vercel/otel": "1.8.2 - Added 
knitwork": "1.1.0 - Updated to 
@scayle/omnichannel-nuxt": "3.0.0to be compatible with latest Omnichannel API - Updated to 
@scayle/storefront-nuxt": "7.66.4 - Updated to 
@storyblok/nuxt": "6.0.10 - Updated to 
@storyblok/vue": "8.0.8 - Updated to 
@tailwindcss/typography": "0.5.13 - Updated to 
cf-content-types-generator": "2.15.1 - Updated to 
contentful": "10.9.0 - Updated to 
storyblok-js-client": "6.7.3 
v1.0.0-rc.9
🔥 Highlights
📖 Introducing Contentful as the new CMS Provider for StorefrontCMS
We've added a Contentful integration as an alternative to using Storyblok as a CMS provider. This allows you to fetch data from Contentful and use it in your SFB. To use this feature, you need to provide your Contentful space ID and access token in the .env file. You can find these values in your Contentful account settings.
Once you have added these values, you can use Contentful by selecting the contentful option in the cms.provider field of the nuxt.config.ts file.
Now you have access to useCMS composables and fetch data from Contentful in your SFB. useCMS accepts a string as an argument that will be used for caching purposes and returns a fetchBySlug function that you can use to fetch data by slug. fetchBySlug is a wrapper around Nuxt's useAsyncData and accepts a generic type that you can use to define the shape of the data you are fetching. Here is an example of how you can use this feature:
🔎 Introducing Search Engine v2
We've implemented and replaced the whole search flow based on the new Storefront API's Search Engine v2. This includes:
- Overall UI and UX adaptations (header search input, suggestions dropdown, applicable filter indicator, search within the mobile sidebar, etc.)
 - Category suggestions that can have filters applied
 - Product suggestions that are resolved only by entering the exact ID
 - Refined flow when resolving the search term
 - Search page usage only as a fallback
 
Added Subscription Add-on
We've implemented the Subscription Add-ons as a local module. The subscription feature enables customers to subscribe to a specific variant of a product, which is then delivered at regular intervals on a chosen day. This convenience allows customers to make regular purchases effortlessly.
🚀 Major Changes
- Fixed an issue where an empty IDP component was shown when no IDPs were enabled. The 
useIDPcomposable now returns an empty object when the IDP integration is not enabled. Ensure that the user is redirected to CO when entering the sign-in page with aredirectUrlparameter. This is now possible with the@scayle/storefront-nuxt@{version}. We refactored the IDP callback to have its page to ensure we only call the IDP login RPC once. - Improved Storyblok integration through the SCAYLE Panel Add-on and plugin
 - Disabled caching for Vercel Deployments Vercel's CDN Caching works slightly differently from the default Nuxt Page caching, which is currently incompatible with our Session handling. To disable all caching for Vercel Deployments, remove any 
routeRulesyou have configured in yournuxt.config.ts. - Added ability to scroll to anchor links on the same page. The 
Paragraphcomponent now supports ananchorprop that will be used to create an anchor target for that paragraph. If you have a Table of Contents and want to link to a specific paragraph, you can use the create links function on any text in your Content to create a link to it. When the user clicks on the link, he will scroll to the paragraph on the page. We also introduced a new component,NestedParagraph,that allows adding nested paragraphs, for example, for ordered lists. 
💅 Minor Changes
- Tweaked account index page to be visually consistent with other account page layouts
 - Introduced a new feature for logging both build and runtime configurations Configuration logging can now be toggled on or off using the 
ENABLE_CONFIG_LOG_BUILDandENABLE_CONFIG_LOG_RUNTIMEenvironment variables. - Added 
@scayle/eslint-plugin-vue-composableThis plugin includes three rules@scayle/vue-composable/no-composable-after-await,@scayle/vue-composable/no-lifecycle-after-await,@scayle/vue-composable/no-watch-after-awaitwhich catches common errors in composables. You can read more about the plugin here. - The improved user experience of the time box element within the Promotion Banner. Adds a clear understanding of the time left for the promotion to end by providing indicators of the time unit in the time box element for countdowns. The format of the time box element is changed to be more user-friendly with 
(D : H : M)format, or(H : M : S)format if the promotion lasts less than24H. 
Patch Changes
- Modified paddings of PromotionHurryToSaveBanners to have visual consistency with PromotionItemContent
 - Fixed a German translation issue for "save_your_free_gift"
 - Fixed promotion automatic discount price on PDP
 - Removed full capitalization of PromotionHurryToSaveBanner label
 - Handle possible 
undefinedresults fromuseRpccalls - Add store address, phone, and open status to the map marker card
 - Fixed StoreLocator map covering navigation flyout
 - Fixed a z-index issue with the ToastContainer so that notifications are not partially displayed underneath the Promotion Banner
 - Adds missing Promotion Banner Link to Promotion Category on mobile view
 - Removed dummy non-functional shipment detail link from OrderStatusBar
 - An error has been fixed where an attempt was made to access the "document" object during server-side rendering, resulting in an inaccessible Order Success Page (OSP).
 - Added translatable string 'pdp.no_product_information_provided' for ProductDescription and ProductCompositionAndCare components instead of static string
 
🏡 Dependency Updates
🏘️ devDependencies
- Added 
@scayle/[email protected] - Updated to 
@crowdin/[email protected]" - Updated to 
@nuxt/[email protected] - Updated to 
@nuxtjs/[email protected] - Updated to 
@scayle/[email protected] - Updated to 
@types/[email protected] - Updated to 
@typescript-eslint/[email protected] - Updated to 
@typescript-eslint/[email protected] - Updated to 
@upstash/[email protected] - Updated to 
@vitest/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] 
🏠 dependencies
- Added 
@contentful/[email protected] - Added 
@storyblok/[email protected] - Added 
[email protected] - Added 
[email protected] - Added 
[email protected] - Added 
[email protected] - Added 
[email protected] - Added 
[email protected] - Removed 
[email protected] - Updated to 
@scayle/[email protected] - Updated to 
@scayle/[email protected] - Updated to 
@tailwindcss/[email protected] - Updated to 
@types/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] 
1.0.0-rc.08
This release focuses on stabilization and modularization, to improve the technical foundation and developer experience.
🔥 Highlights
✨ Update to Nuxt 3.10.3 and Vue 3.4.21
Storefront Application now runs on both the latest Nuxt v3.10.3 and Vue v3.4.21 and benefits from a multitude of improvements. To get more details about all the changes see the Official Nuxt 3.10 Announcement Blog and the Official Vue 3.4.21 Changelogs.
📍 SCAYLE Omnichannel Add-on for Storefront
Storefront now supports the SCAYLE Omnichannel Add-on, which includes the StoreLocator page and StoreAvailability within the Product Detail Page.
🔭 Additional Tracking Improvements
The included tracking implementation has been refactored and received various improvements to increase the tracking data quality, as well as tracking data reliability.
🚀 Major Changes
- BREAKING: Refactored default 
sameSitecookie settings fromnonetolaxinconfig/storefront.ts - Added 
StoreLocatorpage based on Google Maps andSCAYLE Omnichannel - Added 
StoreAvailabilityto Product Detail Page usingSCAYLE Omnichannel - Added 
patch-packagesfor managing patches to third-party packages. SeeREADME.mdor thepatches/directory for an up-to-date listing of currently applied patches.- Patched 
unstorageso the VercelKV driver is not logged asundefined 
 - Patched 
 - Removed 
authconfig incomposables/useAuthentication.tsanduseRuntimeConfig().public.storefront.authfield inconfig/storefront.ts - Changed public 
runtimeConfigtype toModulePublicRuntimeConfig 
💅 Minor Changes
- Fixed caching behaviour for account area via 
routeRulesinnuxt.config.ts - Fixed wishlist toggle if wishlist data is being toggled and fetched in 
components/product/WishlistToggle.vue - Refactored error message handling during local development mode to show actual error with stack trace
 - Fixed product detail page and product listing page (category page) behaviour if basket data is undefined
 - Fixed Storyblok CMS data handling in 
pages/s/[slug].vue - Fixed Storyblok CMS components handling in 
pages/c/[slug].vue - Renamed 
categoryNotFoundtofoundCategoryByPathinpages/[...category].vue - Fixed error handling for non-existing category slug by throwing a 
404error and removed error handling fromlayouts/defaults.vue - Fixed redirection from the error page to the homepage
 - Converted 
routeChangeTrackingObserverto the route middleware and added delayed execution - Fixed redirection behaviour on login from checkout, as it will now redirect after login back to checkout
 - Used 
onNuxtReadyinstead oftryOnMountedforcomposables/tracking/watchers/useCustomerDataChangeWatcher.tsand removed user force refresh - Fixed links on Storyblok grid tile, clickable image and banner link
modules/cms/providers/storyblok/components/BannerLink.vuemodules/cms/providers/storyblok/components/ClickableImage.vuemodules/cms/providers/storyblok/components/GridTile.vuemodules/cms/providers/storyblok/components/StoryblokLink.vue
 - Fixed category behaviour by using new composable 
useCategoryByPathto source category data inpages/[...category].vue - Fixed category behaviour by using 
stripShopLocaleFromPathand remove the computed value inpages/[...category].vue - Refactored root categories logic and implemented app navigation trees
- Added 
composables/useCategory.ts - Added 
composables/useNavigationTreeItems.ts - Added 
composables/useRootCategories.ts - Refactored 
components/layout/footer/AppFooter.vue - Refactored 
components/layout/headers/AppHeader.vue - Refactored 
components/layout/headers/HeaderSubNavigation.vue - Refactored 
components/layout/navigation/MobileSidebar.vue - Refactored 
composables/useProductList.ts - Refactored 
pages/[...category].vue 
 - Added 
 - Improved tracking behaviour
- Refactored 
composables/tracking/events/useUserActionEvents.ts - Refactored 
composables/tracking/watchers/useCustomerDataChangeWatcher.ts - Refactored 
composables/useWishlistPage.ts - Refactored 
nuxt.config.ts 
 - Refactored 
 - Fixed promotion handling and hides gifts if minimum order value (
mov) is not satisfied- Refactored 
composables/useBasketItemPromotion.ts - Refactored 
composables/useProductPromotions.ts - Refactored 
composables/usePromotionProgress.ts - Refactored 
utils/promotion.ts 
 - Refactored 
 - Adjusted promotion basket gift conditional banner labels
- Refactored 
components/basket/promotion/BasketGiftConditionBanner.vue - Refactored 
composables/useBasketItemPromotion.ts - Refactored 
langs/de-DE.json - Refactored 
langs/en-GB.json - Refactored 
langs/en_origin.json 
 - Refactored 
 - Adjusted promotion conditional banner on the product detail page
components/basket/promotion/BasketGiftConditionBanner.vuecomponents/product/promotion/ProductPromotionGiftConditionBanner.vuecomposables/useProductPromotions.tspages/p/[slug].vue
 - Reduced duplicate promotion quantity and cost logic
- Added 
composables/usePromotionConditionBanner.ts - Refactored 
components/basket/promotion/BasketGiftConditionBanner.vue - Refactored 
components/product/promotion/ProductPromotionGiftConditionBanner.vue - Refactored 
langs/de-DE.json - Refactored 
langs/en-GB.json - Refactored 
langs/en_origin.json 
 - Added 
 - Extracted promotion condition banner to unified component and reuse it
- Added 
components/promotion/PromotionGiftConditionBanner.vue - Refactored 
components/basket/promotion/BasketGiftConditionBanner.vue - Refactored 
components/product/promotion/ProductPromotionGiftConditionBanner.vue 
 - Added 
 - Replaced used promotion 
movabbreviation with full keywordminOrderValueto reduce complexity- Refactored 
components/basket/promotion/BasketGiftConditionBanner.vue - Refactored 
components/product/promotion/ProductPromotionGiftConditionBanner.vue - Refactored 
composables/useBasketItemPromotion.ts - Refactored 
composables/useProductPromotions.ts - Refactored 
composables/usePromotionConditionBanner.ts - Refactored 
langs/de-DE.json - Refactored 
langs/en-GB.json - Refactored 
langs/en_origin.json 
 - Refactored 
 - Extended End-to-End testing behaviour with promotion features
- Refactored 
components/product/promotion/ProductPromotionSelectionModal.vue - Refactored 
components/promotion/PromotionHurryToSaveBanners.vue - Refactored 
composables/useBasketPromotions.ts - Refactored 
composables/useProductPromotions.ts - Refactored 
composables/usePromotionGifts.ts - Refactored 
pages/p/[slug].vue 
 - Refactored 
 - Fixed and refactored Identity Provider support
- Added 
components/auth/IDPCallback.vue - Refactored 
components/auth/IDPForm.vue - Refactored 
components/auth/SignInForm.vue - Refactored 
components/auth/LoginForm.vue - Refactored 
composables/useAuthentication.ts - Refactored 
config/storefront.ts 
 - Added 
 
🩹 Patch Changes
- Aligned check icon within colour chip
 - Fixed missing flyout close for sub-navigation in 
components/layout/headers/AppHeader.vue - Replaced default Nuxt favicon with SCAYLE favicon in 
public/favicon.ico - Added 
immediate: trueto watcher and refactoredcomposables/tracking/watchers/useCustomerDataChangeWatcher.tsto avoid delayed execution and wrongly reported tracking data - Fixed application crash during server-side rendering while trying to access 
window.localStorageincomposables/useLastLoggedInUser.ts - Fixed rendering issues with product price by using optional chaining 
basketData.value?.itemsincomponents/product/ProductPrice.vue - Set the default TTL of the cache storage provider with Redis to 
10minutes to avoid unlimited cache keys - Replaced translation 
SichtwithAnsehenfor notification CTA - Fixed the wrong config type for 
gtm.debuginnuxt.config.ts - Fixed incorrect triggering of 
content_viewtracking event during server rendering inmiddleware/routeChangeTrackingObserver.global.ts - Hide the scrollbar on the homepage collection content
 
🏡 Dependency Updates
🏘️ devDependencies
- Updated to 
@types/[email protected] - Updated to 
@upstash/[email protected] - Updated to 
@vitest/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected](For detailed changes see Release Notes for Nuxt) - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] 
🏠 dependencies
- Added 
@googlemaps/[email protected] - Added 
@scayle/[email protected] - Added 
@types/[email protected] - Updated to 
@scayle/[email protected] - Updated to 
@storyblok/[email protected] - Updated to 
@vueuse/[email protected] - Updated to 
@vueuse/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected](For detailed changes see Changelog for Vue) 
1.0.0-rc.07
This release focuses on stabilization and modularization, to improve the technical foundation and developer experience.
🔥 Highlights
✨ Update to Nuxt 3.10.1 and Vue 3.4.19
Storefront Application now runs on both the latest Nuxt v3.10.1 and Vue v3.4.19 and benefits from a multitude of improvements. To get more details about all the changes see the Official Nuxt 3.10 Announcement Blog and the Official Vue 3.4.19 Changelogs.
🧪 Modularization: Extracting Cypress into a dedicated sub-package
The Cypress testing solution has been extracted into a dedicated child package located at cypress/. This decouples the dependencies from the main Storefront Application. To install all relevant Cypress dependencies, execute yarn install within the cypress/ directory. By default, the current Cypress integration does not rely anymore on the commercial Cypress Dashboard integration. Please check the dedicated Readme file located at cypress/README.md for more details.
The following dependencies have moved from package.json to cypress/package.json:
cypresscypress-real-eventseslint-plugin-cypress
🧱 Modularization: Extracting Storyblok Integration into the local module
The Storyblok integration has been extracted into a dedicated local Nuxt module storefront-cms. This allows to combine all CMS provider relevant functionalities within a central Nuxt module and allows for simple future inclusion of additional CMS providers.
The new local Nuxt module can be found under modules/cms/ and its path has been added to nuxt.config.ts to the modules list.
🧲 Tracking Refactoring and Improvements
The included tracking implementation has been refactored and received various improvements to increase the tracking data quality, as well as tracking data reliability.
🚀 Major Changes
- BREAKING: Added support for runtimeConfig with 
@nuxt/image- Added patch files for automatic dependency patching with 
patch-package. The tool will run inpostinstalland apply any patches present in thepatches/directory to the respective dependency. - Extended 
README.mdwith a section regardingPatchesto explain the details and currently applied patches 
 - Added patch files for automatic dependency patching with 
 - Added full support for an easy way of running the application through docker compose
 
💅 Minor Changes
- Refactored Wishlist
- Added 
WishlistCardSlideIn,WishlistCardImageandWishlistCardDescriptioncomponents - Added 
useWishlistPage,useWishlistItemanduseWishlistItemActionscomposables 
 - Added 
 - Fixed an issue with Guest User being able to access the Account page, even though it did not have any content
 - Fixed an issue with the Order pages not properly displaying content due to page caching issues while using path-based routing
 - Fixed various UX/UI issues for the new Promotion Engine feature
 - Fixed hydration issues related to viewport-dependent font-size classes on PDP in 
pages/p/[slug].vue - Fixed hydration issues related to viewport-dependent font-size classes on PLP in 
components/product/card/ProductCard.vue - Refactored various components to use new Vue v3 
defineEmitssyntax for eventscomponents/layout/headers/search/MobileSearchInput.vuecomponents/search/CategorySuggestions.vuecomponents/search/ProductSuggestions.vuecomponents/search/SearchResultItem.vuecomponents/search/SearchResults.vuecomponents/search/SearchResultsContainer.vue
 - Fixed 
DefaultLinkbehaviour with path-based routing incomponents/ui/links/DefaultLink.vue - Fixed client-side validation behaviour for login and registration forms
components/auth/GuestLoginForm.vuecomponents/auth/LoginForm.vuecomponents/auth/RegisterForm.vuecomponents/auth/SalutationSelect.vue
 - Fixed the "Register" link to open the "Registration" tab within the 
SignInFormincomponents/auth/SignInForm.vue 
🩹 Patch Changes
- Added 
hasOneSizeProductVariantOnlyhelper withinsizesutil - Fixed UX / UI issues for the Order details page in 
pages/account/orders.vue - Fixed UX / UI issues with login and registration forms
 - Fixed window scrolling on PLP pagination in 
components/ui/pagination/PaginationButton.vue 
🏡 Dependency Updates
🏘️ devDependencies
- Updated to 
@crowdin/[email protected] - Updated to 
@nuxt/[email protected] - Updated to 
@nuxtjs/[email protected] - Updated to 
@nuxtjs/[email protected] - Updated to 
@types/[email protected] - Updated to 
@upstash/[email protected] - Updated to 
@vitest/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] 
🏠 dependencies
- Updated to 
@scayle/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] 
1.0.0-rc.06
This release focuses on stabilization and refactoring, to improve the technical foundation and developer experience.
🚀 Major Changes
- BREAKING: Nest public Storefront-specific 
runtimeConfigproperties under thestorefrontkeyuseRuntimeConfig().public.loganduseRuntimeConfig().public.authshould be replaced byuseRuntimeConfig().public.storefront.loganduseRuntimeConfig().public.storefront.log(...storefrontRuntimeConfigPublic as any),tostorefront: storefrontRuntimeConfigPublic as any,innuxt.config.ts
 
💅 Minor Changes
- Extracted sorting and grouping basket helpers to 
utils - Properly resolve 
basketGroupRPC with params - Removed wishlist utils and moved them to the 
useWishlistActionscomposable - Replaced 
validationplugin withuseValidationRulescomposable - Replaced 
toastplugin withuseNotificationcomposable - Replaces 
trackingplugin withuseTrackingcomposable - Renamed 
divideWithHundredprice utility todivideByHundred - Renamed 
localeFormattedDatedate utility toformatLocaleDate - Enforced using tracking sub-composables through the 
useTrackingEventsby turning off auto-import for sub-composables - Simplified 
Countdowncomponent logic by usinguseIntervalFnfromvueuse - Changed 
radashutils prefix to be underscore (_) instead ofuse, to avoid confusion betweenradashutilities and Vue composables. Resulting in e.g.useSleepto become_sleep. - Used radash 
_sort(useSort) instead of nativesortto avoid side effects - Export composables as named functions
 - Refactored components to use 
withDefaultsand type generics to define component properties - Refactored product and navigation components to reduce complexity
 - Refactored account area component to reduce complexity and improve UI experience
components/account/AccountHeader.vuecomponents/account/AccountWrapper.vuecomponents/addOns/AddOnsSelector.vuecomponents/order/OrderHeader.vuecomponents/order/OrderItemCard.vuecomponents/order/OrderOverviewHeader.vuecomponents/order/OrderStatusBar.vuepages/account/orders.vuepages/account/user.vuepages/account/orders/[id].vue
 - Refactored account area orders components to reduce complexity and improve UI experience
components/account/AccountWrapper.vuecomponents/order/OrderHistoryItem.vuecomponents/order/OrderItems.vuecomposables/useOrders.ts
 - Refactored used Tailwind classes across the Storefront Application to comply with used Tailwind version
 - Tweaked Promotion Engine implementation and UI experience across the Storefront Application
 - Tweaked Order Success Page (OSP) complexity and UI experience
 
🩹 Patch Changes
- Refactored 
slicedOrdersto be acomputedproperty incomponents/account/AccountWrapper.vue - Refactored 
_sizesto be acomputedproperty incomponents/product/ProductSizePicker.vue - Refactored 
components/addOns/AddOnsSelector.vueto usecomputedproperties instead ofrefand dedicated update functions - Refactored 
basketItemsto have an empty array as fallback incomponents/basket/popover/BasketPopoverItems.vue - Added missing state key for 
footerNavigationTreesincomponents/layout/footer/AppFooter.vue - Simplified watcher for 
searchQueryincomponents/layout/headers/search/HederSearch.vue - Refactored Nuxt-specific imports to import from 
#appinstead ofnuxt/app - Added 
collapsedcomponent property tocomponents/product/detail/ProductDetailAccordionEntry.vue - Use object for lookup of headline sizes instead of 
computedproperty incomponents/ui/headlines/Headline.vue - Fixed desktop sidebar overlapping navigation in 
pages/[...category].vue - Added 
timeconstants inconstants/time.tsand used it incomponents/ui/Countdown.vue - Refactored 
PromotionBannerto be displayed ononNuxtReadyinstead ofonServerPrefetchto avoid missing interactivity during page load and hydration - Removed 
runtimeConfig.public.storyblok.webhookSecretfromnuxt.config.ts, as it is not supported by thestoryblok-nuxtmodule - Use 
ynto typecast potential build value ofruntimeConfig.public.gtm.debugviayn(process.env.NUXT_PUBLIC_GTM_DEBUG)innuxt.config.ts 
🏡 Dependency Updates
🏘️ devDependencies
- Updated to 
@crowdin/[email protected] - Updated to 
@nuxt/[email protected] - Updated to 
@nuxt/[email protected] - Updated to 
@nuxtjs/[email protected] - Updated to 
@types/[email protected] - Updated to 
@upstash/[email protected] - Updated to 
@vitest/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected](For detailed changes see Release Notes for Nuxt) - Updated to 
[email protected] - Updated to 
[email protected] 
🏠 dependencies
- Updated to 
@scayle/[email protected] - Updated to 
@storyblok/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected](For detailed changes see Changelog for Vue) 
1.0.0-rc.05
🔥 Highlights
✨ Update to Nuxt 3.9 and Vue 3.4
Storefront Application now runs on both the latest Nuxt v3.9 and Vue v3.4 and benefits from a multitude of improvements. To get more details about all the changes see the Official Nuxt 3.9 Announcement Blog and the Official Vue 3.4 Announcement Blog.
🛫 Introducing Promotion Engine
The Promotion Engine presents the user with various promotions that have specific conditions for receiving the discount. The Storefront Application currently supports the two types Automatic discount and Buy X get Y by default as promotions.
- SCAYLE Resource Center - Storefront Application / Promotion Engine
 
👥 Identity Provider support for Token-based Authentication
The Storefront Application now provides support for Single-Sign-On (SSO) via multiple Identity Providers (IDP) like Okta, KeyCloak, or Google. The IDP login / SSO flow integrates with the existing Token-based Authentication and can be used in parallel with the existing SCAYLE IDP.
- SCAYLE Resource Center - Storefront Core / Authentication
 
🔋 Introducing Page Caching with unified cache handling
The distributed default configuration of the Storefront Application comes with page caching enabled and relies on the global storefront-cache storage mountpoint available via Storefront Core - Caching and configured via Storefront Core - Storage via Module Configuration.
- SCAYLE Resource Center - Storefront Application / Page Caching
 
🛫 Introducing support for Vercel Edge deployment
Storefront Application does now support deployment to Vercel Edge, besides Docker-based deployments.
- SCAYLE Resource Center - Storefront Application / Vercel Edge
 
🚀 Major Changes
- Updated Cypress E2E test suite
 - Introduced new utility 
formatCurrency()inuseFormatHelpersand refactored the usage ofgetCurrency()&toCurrency() - Removed 
nuxt-viewportand refactored the application to useuseDefaultBreakpointscomposable based onVueUse/useBreakpoints(For details see VueUse Documentation) - Reduced the usage of viewport detection logic and refactored UI to rely on responsive layouts instead
 - Extract and refactor Product Filter handling on the Category and Search page
 - Refactored i18n integration and usage across applications due to the update of 
@nuxt/i18ntov1.0.0stable release 
💅 Minor Changes
- Removed 
stylelint, related dependencies, and package script commands - Replaced 
nuxt-vitestwith@nuxt/[email protected]as the projects have been officially merged together (For detailed changes see Changelog of @nuxt/test-utils)- Introduced 
[email protected] 
 - Introduced 
 - Remove unsupported 
imageBaseUrloption key fromstorefrontRuntimeConfigPublicinconfig/storefront.ts - Removed usage of 
process.envfromnuxt.configandconfig/storefront.ts, relying on using runtime environment variables instead (_For details see Nuxt Documentation - runtimeConfig / Environment Variables) - Allowing to use HTTP during local development mode
 - Extend 
.env.examplewith updated environment variables for locale development purposes - Added documentation reference links into 
nuxt.config.ts - Added comments with environment variable names to override runtimeConfig keys into 
nuxt.config.tsandconfig/storefront.ts - Removed unused 
nuxt/utils/cms.ts - Introduce 
useOrderscomposable to unify orders handling - Changed usage of 
forgotPassword(data: SendResetPasswordEmailRequest)toforgotPassword(email: string)inuseAuthenticationcomposable, refactored occurrences accordingly - Introduce 
@vercel/kvand@upstash/redisfor VercelKV support - Extend 
routeRulesinnuxt.config.tsto handle Vercel page caching - Extend 
routeRulesinnuxt.config.tsto support multiple cache configurations - Extend 
routeRulesinnuxt.config.tsto allow disabling SSR Page Caching via environment variables during build time withDISABLE_SSR_CACHE - Extend 
cache-test.mjs - Set 
differentDomainsbased on the environment variableDOMAIN_PER_LOCALEduring build time innuxt.config.ts - Enable 
debug: trueinnuxt.config.tsto be able to pinpoint potential hydration mismatches or enumerating key issues - Various types tweaks and refinements
 
🩹 Patch Changes
- Fixed Storyblok integration with the handling of invalid 
product_idsinstoryblok/components/ProductSlider - Fixed Storyblok integration on Category pages without defined Storyblok CMS category slug resulting in error pages in 
pages/[...category].vue - Fixed issue with unavailable product colors on the Product Detail Page in 
pages/p/[slug].vue] - Removed 
version: getStoryblokContentVersion(),fromcomposables/useCms.ts - Fixed caching behaviour and incorrect product list layout in 
components/productList/ProductList.vue&pages/[...category].vue] - Fixed Order types in 
components/order/OrderHeader.vue,components/order/OrderItems.vue,components/order/summary/PaymentSummary.vue,pages/account/orders/[id].vue - Fixed computed property 
orderItemsinpages/account/orders/[id].vue - Fixed ProductBadge position in 
components/product/ProductBadge.vueandcomponents/productList/ProductList.vue - Fixed user information disappearing after reloading by disabling 
autoFetchand fetching user data explicitlyonMountedincomponents/layout/headers/user/UserPopover.vue - Fixed re-fetching for product list in 
pages/[...category].vue] - Fixed mobile sidebar overlapping issue in 
components/layout/navigation/MobileSidebar.vue - Fixed-size picker overlapping issue in 
components/wishlist/card/WishlistCard.vue - Fixed SlideIn overlapping issue in 
components/layout/SlideIn.vueandcomposables/useSlideIn.ts - Fixed the Wishlist and Basket page being incorrectly cached
 - Fixed incorrect routing behaviour in the following files
components/layout/headers/search/HeaderSearch.vuecomponents/ui/links/DefaultLink.vuecomposables/useRouteHelpers.tsmiddleware/authGuard.global.tsutils/route.ts
 - Various other smaller fixes and improvements
 
🏡 Dependency Updates
🏘️ devDependencies
- Removed 
@nuxt/devtoolsfrom devDependencies, as it's now included with[email protected]or higher - Updated to 
[email protected](For detailed changes see Changelog for Vue) - Updated to 
[email protected](For detailed changes see Release Notes for Nuxt) - Updated to 
@crowdin/[email protected] - Updated to 
@nuxt/[email protected] - Updated to 
@nuxt/[email protected] - Updated to 
@nuxtjs/[email protected] - Updated to 
@nuxtjs/[email protected] - Updated to 
@scayle/[email protected] - Updated to 
@types/[email protected] - Updated to 
@types/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] [email protected][email protected]- Updated to 
[email protected]. [email protected][email protected][email protected][email protected][email protected][email protected][email protected]- Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected]and@vitest/[email protected] - Updated to 
[email protected](NOTE: This dependency update is required for proper[email protected]type checking!) 
🏠 dependencies
- Added 
[email protected]as it is now a standalone project within the Nuxt ecosystem - Added 
[email protected]as explicit dependency to avoid potential version mismatches - Updated to 
@scayle/[email protected](For detailed changes see SCAYLE Resources Center - Releases) - Updated to 
@storyblok/[email protected] - Updated to 
@tailwindcss/[email protected] - Updated to 
@vueuse/[email protected]and@vueuse/[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] - Updated to 
[email protected] 
1.0.0-rc.04
🚀 Major Changes
- Use public npmjs.org package registry for 
@scaylepackages and remove the need for a local.npmrcfile - Use public 
storyblok-generate-tspackage instead of a private fork 
💅 Minor Changes
- Updated to latest 
@scayle/storefront-nuxtpackage usingv7.37.2 - Improved Dockerfiles for build and deployments
 
🩹 Patch Changes
- Updated various dependencies to the latest versions
 
1.0.0-rc.03
🚀 Major Changes
- Introduced 
vitestfor unit testing and created dummy test files for most components - Introduced page caching using Route Rules
 - Replacing AuthGuard component with router middleware
 - Use 
defineOptionsforvuecomponent naming 
💅 Minor Changes
- Introduce 
localizedNavigateTofor the programmatic routing approach - Upgrade to Vue 3.3.7
 - Replaced 
useUiStatewith smaller composables which are:useFlyouts,useMobileSearch,useModal&useSideNavigation. - Enable auto-import for the 
constantsfolder - Various dependency minor dependency
 
🩹 Patch Changes
- Fixed session max-age
 - Handle AddToWishlist errors
 - Added missing Storyblok components
 - Resolved Storyblok link
 - Fixed broken links when path-based shops are enabled
 - Various bug fixes
 
1.0.0-rc.02
💅 Minor Changes
- Upgrade to Nuxt 3.7.4
 
🩹 Patch Changes
- Reduction of hydration errors
 - Improved error handling for invalid products on PDP, as well as category and service pages
 - Improved handling of displaying account related UI elements for guest user
 - Improved order refresh behaviour on Order Success Page
 - Various smaller bug fixes
 
1.0.0-rc.01
🚀 Major Changes
- Introduce Nuxt 3
 - Tracking of all relevant shop interactions with GTM
 - Implemented Search Engine optimizations
 - Provide more CMS content integrations (Storyblok) into all relevant pages
 
💅 Minor Changes
- Improved error handling and displaying of error pages
 - Improvements to redirect handling
 - Improved SVG icon handling
 - Improvements to mobile styling and behaviour
 
🩹 Patch Changes
- Various bug fixes