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
SETTINGS_CACHE_DURATION) { console.debug('STOQ - settings changed recently, skipping cache'); return null; } return settings; } catch (error) { console.debug('STOQ - Error checking settings cache:', error); return null; } } function createRestockRocketContainer() { const restockRocketContainer = document.createElement('div'); restockRocketContainer.id = 'restock-rocket'; document.body.appendChild(restockRocketContainer); } function createRestockRocketScript(scriptUrl) { const restockRocketScriptElement = document.createElement('script'); restockRocketScriptElement.setAttribute('defer', 'defer'); restockRocketScriptElement.src = scriptUrl; document.body.appendChild(restockRocketScriptElement); } createRestockRocketContainer() console.debug('STOQ - extension activated') function applyTranslations(settings) { try { // Skip translation logic entirely if multi-language is not enabled if (!settings || fig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'index' && (settings.show_button_on_index || settings.preorder_index_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'search' && (settings.show_button_on_search || settings.preorder_search_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_page || settings.preorder_page_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'product') { createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { console.debug(`STOQ - no scripts enab

<
Create accountSearch
Header Image
Cart
Spend
£50 to qualify for free shipping
    Congratulations! Your order qualifies for free shipping
Open search bar

<
<
<
Seat Posts & ClampsPedals
<
<
<<
<







Skip to content
#shopify-section-announcement-bar { background: #f14d38; color: #ccbebe; }
Close
Home Hire
<New Bikes
Shop All New Bikes Road / Gravel / Touring Bikes
Hybrid / City Bikes
Mountain Bikes Electric Bikes
Kids Bikes
Brakes Complete Brakes
Brake Rotors

Accessories
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.