ate)) ? plan.updated_at : max;
}
return max;
}, '')
: null;
// Use cached if old array is empty/has no timestamps, or cached is newer
// Parse dates for comparison to handle format differences (+00:00 vs .000Z)
const cachedDate = new Date(cachedData.cached_at);
const maxDate = maxUpdatedAt ? new Date(maxUpdatedAt) : null;
const useCached = !maxUpdatedAt || (cachedDate && !isNaN(cachedDate) && (!maxDate || cachedDate > maxDate));
if (useCached) {
if (Array.isArray(cachedData.plans)) {
window._RestockRocketConfig.sellingPlans = cachedData.plans;
// Only use disabled_plan_ids when using cached plans
window._RestockRocketConfig.disabledSellingPlanIds = cachedData.disabled_plan_ids || [];
console.debug('[RR] Using selling plans from cachedSellingPlans (cached_at: ' + cachedData.cached_at + ')');
}
} else {
// When using old format
div class="result__image" data-aspectratio="{{ it.product.image.aspectRatio }}" data-product-image>
edAt timestamp, assuming fresh');
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else {
const now = Math.floor(Date.now() / 1000); // Current time in seconds
const liquidCacheAge = now - liquidRenderedAt; // Age in seconds
// Handle client clock ahead of server
if (liquidCacheAge
a href="{{ it.product.url }}" class="result__image-link" aria-label='{{ it.product.title }}'>
0) {
console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`);
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else if (liquidCacheAge
div class="result__image-img product__media lazyload fade-in"
data-bgset="{{ it.product.image.thumb }}"
data-aspectratio="{{ it.product.image.aspectRatio }}"
data-sizes="auto">
{{@if(it.product.badgeText)}}
= LIQUID_CACHE_MAX_AGE) {
console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`);
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else {
console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`);
window._RestockRocketConfig.isLiquidCacheFresh = false;
}
}
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
div class="product__tag{{ it.product.badgeClasses }}">age = Date.now() - updatedAt.getTime();
if (age
6719,"enabled":true,"variant_ids":[55569712382335,55569712415103,55569712480639,55570017616255,55570017550719,55569712447871,55570017583487],"product_variants_source":"custom","name":"Preorder","preorder_button_text":"Preorder","preorder_button_description":"Note: This is a preorder. Items will ship based on the estimated delivery date.","preorder_button_description_background_color":"#ebebeb","preorder_button_description_text_color":"#000000","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_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
'object' && cachedData.cached_at) {
// Find the maximum updated_at from all items in old array
const oldPlans = window._RestockRocketConfig.sellingPlans;
const maxUpdatedAt = Array.isArray(oldPlans) && oldPlans.length > 0
? oldPlans.reduce(function(max, plan) {
// Parse dates for proper comparison (handles mixed ISO formats)
if (plan.updated_at) {
const planDate = new Date(plan.updated_at);
const maxDate = max ? new Date(max) : null;
return (!maxDate || (planDate && !isNaN(planDate) && planDate > maxDate)) ? plan.updated_at : max;
}
return max;
}, '')
: null;
// Use cached if old array is empty/has no timestamps, or cached is newer
// Parse dates for comparison to handle format differences (+00:00 vs .000Z)
const cachedDate = new Date(cachedData.cached_at);
const maxDate = maxUpdatedAt ? new Date(maxUpdatedAt) : null;
ex","search","page","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.product = {"id":8663422533858,"title":"Ridgeback Destiny","handle":"ridgeback-destiny-1","description":"\u003cul\u003e\n\u003cli\u003e Ridgeback Destiny is a lightweight bike for kids between 9 to 13 years old and is full of great features to help your little one on their wheeled adventure. Built with a lightweight aluminium frame, the Ridgeback Destiny is perfectly proportioned to provide young riders the best comfort and control.\u003c\/li\u003e\n\u003cli\u003eWeight - 12.85kg\u003c\/li\u003e\n\u003cli\u003eHeight range 140cm - 150cm\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c!--
_f_freewheel_imagessportlinefwbikesrb22790_detail05.webp?v=1722607140","\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22790_detail04.webp?v=1722607140","\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22790_detail03.webp?v=1722607140","\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail05.webp?v=1722607140","\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail01.webp?v=1722607140","\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail04.webp?v=1722607140","\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail03.webp?v=1722607140","\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail02.webp?v=1722607141"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22790_detail01.webp?v=1722607140","optionBook a Serviceiles\/ftp_f_freewheel_imagessportlinefwbikesrb22790_detail04.webp?v=1722607140"},"aspect_ratio":1.229,"height":1000,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22790_detail04.webp?v=1722607140","width":1229},{"alt":null,"id":34382314668258,"position":4,"preview_image":{"aspect_ratio":1.581,"height":970,"width":1534,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22790_detail03.webp?v=1722607140"},"aspect_ratio":1.581,"height":970,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22790_detail03.webp?v=1722607140","width":1534},{"alt":null,"id":34382314701026,"position":5,"preview_image":{"aspect_ratio":1.498,"height":1000,"width":1498,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail05.webp?v=1722607140"},"aspect_ratio":1.498,"height":1000,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop
1.788,"height":858,"width":1534,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail03.webp?v=1722607140"},"aspect_ratio":1.788,"height":858,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail03.webp?v=1722607140","width":1534},{"alt":null,"id":34382314832098,"position":9,"preview_image":{"aspect_ratio":1.534,"height":1000,"width":1534,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail02.webp?v=1722607141"},"aspect_ratio":1.534,"height":1000,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/ftp_f_freewheel_imagessportlinefwbikesrb22791_detail02.webp?v=1722607141","width":1534}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cul\u003e\n\u003cli\u003e Ridgeback Destiny is a lightweight bike for kids between 9 to 13 years old and is full of great features to help your little one on their wheeled adventur
};
window._RestockRocketConfig.selected_variant_id = 45764611801314;
window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019cd40b-736e-74a5-adbe-431365bfd910/restockrocket-1-465/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019cd40b-736e-74a5-adbe-431365bfd910/restockrocket-1-465/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_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
const LIQUID_CACHE_MAX_AGE = 2 * 60 * 60; // 2 hours in seconds
Track Your Service
<
<
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 gracefully 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
<
!settings.multi_language_enabled) {
return settings;
}
if (!settings.translations) {
console.debug('STOQ - No translations found, skipping translation');
return settings;
}
const normalizedLocale = window._RestockRocketConfig.normalizedLocale;
const translations = settings.translations;
if (!normalizedLocale) {
// No matching locale has translations; drop payload to save memory
console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {}));
delete settings.translations;
return settings;
}
console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`);
const translatedFields = translations[normalizedLocale];
if (translatedFields && typeof translatedFields === 'object') {
Object.keys(translatedFields).forEach(function(key) {
const value = translatedFields[keyOther
Create accountSearch
Cart
CloseSpend £50 to qualify for free shipping
Congratulations! Your order qualifies for free shipping
As the gravel segment expands, cyclists face new challenges. The issue of having dirt thrown in your face is a well known problem among mountain bikers. With huge clearances for wide tires in the front fork, gravel riders are now facing a similar issue.
While mountain bikers are used to mud, gravel bikers face a different challenge. Anyone who has ridden on a wet gravel road is familiar with the mixture of fine sand and water that seems to be designed especially to seek and destroy bearings, not to mention what it does to your eyes on a long ride.
The MUDDER Mini is here to offer relief for your face and headset bearing. Simply mount it to your fork legs just above your front tire and you will dramatically reduce the amount of spray in the critical areas. The MUDDER Mini attaches with innovative adjustable anti-slip straps to guarantee an instant and perfect fit on all fork sizes.
HandlebarsSearch text field
{
"@context": "http://schema.org/",
"@type": "Product",
"name": "Ass savers mudder mini",
"url": "https:\/\/projektride.co.uk\/products\/ass-savers-mudder-mini","image": [
"https:\/\/projektride.co.uk\/cdn\/shop\/products\/0034696_ass-saver-mudder-mini-black_1200x.jpg?v=1672754248"
],"description": "As the gravel segment expands, cyclists face new challenges. The issue of having dirt thrown in your face is a well known problem among mountain bikers. With huge clearances for wide tires in the front fork, gravel riders are now facing a similar issue.\nWhile mountain bikers are used to mud, gravel bikers face a different challenge. Anyone who has ridden on a wet gravel road is familiar with the mixture of fine sand and water that seems to be designed especially to seek and destroy bearings, not to mention what it does to your eyes on a long ride.\nThe MUDDER Mini is here to offer relief for your face and headset bearing. Simply mount it to your fork legs just above your front tire and you will dramatically reduce the amount of spray in the critical areas. The MUDDER Mini attaches with innovative adjustable anti-slip straps to guarantee an instant and perfect fit on all fork sizes.","sku": "PREA17102022.2567","brand": {
"@type": "Thing",
"name": "ProjektRide"
},"gtin8": "7350072561217","gtin13": "7350072561217","offers": [{
"@type" : "Offer","sku": "PREA17102022.2567","availability" : "http://schema.org/InStock",
"price" : 13.0,
"priceCurrency" : "GBP",
"url" : "https:\/\/projektride.co.uk\/products\/ass-savers-mudder-mini?variant=43727258845410"
}
]
}
Maintenance
.
Genesis
If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.