This site has limited support for your browser. We recommend switching to Edge, Chrome, Safari, or Firefox.
<
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/3bfb7acaf943b4144a2abd302bf53906_951d700f-c345-40f2-90bd-59d0e154d945_600x.webp?v=1747755186)">
Close
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/190325_-_-107_1_600x.webp?v=1747406071)">
<
a class="product__media product__media--featured"
href="/collections/mountain-bikes-1/products/gloria-all-road-shimano-105-dt-swiss-wheelset"
title="Gloria All Road - Shimano 105 - DT Swiss Wheelset"
aria-label="Gloria All Road - Shimano 105 - DT Swiss Wheelset"
style="background-image: url(//projektride.co.uk/cdn/shop/files/Gloria-Low--173_600x.webp?v=1747405637)">
<span class="visually-hidden">Gloria All Road - Shimano 105 - DT Swiss WheelsetUTO (ex Eovolt)>
span class="visually-hidden">Hope Direct mount Stem
>
<
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2025-02-01at11.40.27_600x.png?v=1738410036)">
<
a class="product__media product__media--featured"
href="/collections/mountain-bikes-1/products/hope-rd40-pro-5-front"
title="Hope RD40 PRO 5 - Front"
aria-label="Hope RD40 PRO 5 - Front"
style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2025-02-01at10.26.13_600x.png?v=1738407164)">
Hope RD40 PRO 5 - Front
Essentials
<
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/450_r_2_600x.jpg?v=1738407164)">
Hope RD40 PRO 5 - Front
<
a class="product__media product__media--featured"
href="/collections/mountain-bikes-1/products/gtechniq-bike-ceramic-kit"
title="Gtechniq Bike Ceramic Kit"
aria-label="Gtechniq Bike Ceramic Kit"
style="background-image: url(//projektride.co.uk/cdn/shop/files/gtebbc_600x.jpg?v=1737801626)">
<span class="visually-hidden">Gtechniq Bike Ceramic KitMudguards>
Bags and Transportation
<
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/gtebbc_01_600x.jpg?v=1737801626)">
<
a class="product__media product__media--featured"
href="/collections/mountain-bikes-1/products/genesis-tour-de-fer-31"
title="Genesis Tour De Fer 30 2024"
aria-label="Genesis Tour De Fer 30 2024"
style="background-image: url(//projektride.co.uk/cdn/shop/files/gn13110_detail_01_600x.jpg?v=1723720495)">
Genesis Tour De Fer 30 2024
<
a class="product__media product__media--featured"
href="/collections/mountain-bikes-1/products/genesis-croix-de-fer-51"
title="Genesis Croix De Fer 50"
aria-label="Genesis Croix De Fer 50"
style="background-image: url(//projektride.co.uk/cdn/shop/files/gn11110_detail_01_600x.jpg?v=1723720351)">
Genesis Croix De Fer 50
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/gn11010_detail_02_600x.jpg?v=1723720326)">
<
a class="product__media product__media--featured"
href="/collections/mountain-bikes-1/products/genesis-croix-de-fer-31"
title="Genesis Croix De Fer 30"
aria-label="Genesis Croix De Fer 30"
style="background-image: url(//projektride.co.uk/cdn/shop/files/gn10910_detail_01_600x.jpg?v=1723720301)">
<span class="visually-hidden">Genesis Croix De Fer 30Kona>
UTO (ex Eovolt)<div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/gn10910_detail_02_600x.jpg?v=1723720301)">
a class="product__media product__media--featured"
href="/collections/mountain-bikes-1/products/genesis-croix-de-fer-22"
title="Genesis Croix De Fer 20"
aria-label="Genesis Croix De Fer 20"
style="background-image: url(//projektride.co.uk/cdn/shop/files/gn10810_detail_01_600x.jpg?v=1723720272)">
<span class="visually-hidden">Genesis Croix De Fer 20Custom Builds for sale>
tity_limit":false,"preorder_button_description_quantity_limit_suffix":" units available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_
text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"2025-07-26T09:20:38.472Z","billing_after_n_intervals":7,"billing_after_interval_type":"day","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_sellin
g_plan_id":713071886719,"is_default":true,"type":"full","translations":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true}];window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","pag
e","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_at":"2025-07-26T09:16:04.076Z"}];window._RestockRocketConfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019b9fa3-dc53-7a1c-9078-4931c5088fc8/restock-rocket-shopify-427/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019b9fa3-dc53-7a1c-9078-4931c5088fc8/restock-rocket-shopify-427/assets/restockrocket-collection.js'
window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURA
TION = 15 * 60 * 1000; // 15 minutes in milliseconds
function checkSettingsExpiry(settings) {
try {
if (!settings || !settings.updated_at) {
console.debug('STOQ - Invalid settings data structure');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.multi_language_enabled) {
if (!settings.translations) {
// Translations enabled but no translation data in metafield
// Metafield hasn't been backfilled yet - force refresh
console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh');
return null;
}
// Translations object exists in metafield - cache is valid
// If current locale isn't translated, applyTranslations will gr
acefully use default locale from base fields
if (window._RestockRocketConfig.normalizedLocale &&
!Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) {
console.debug('STOQ - locale not explicitly translated, will use default language from cache');
}
// Don't return null - continue using cache even for untranslated locales
}
const updatedAt = new Date(settings.updated_at);
if (isNaN(updatedAt.getTime())) {
console.debug('STOQ - Invalid updated_at date format in settings');
return null;
}
const age = Date.now() - updatedAt.getTime();
if (age