Brake PadsPreorderMaxCount = {45662946033890 : parseInt(""),45662975295714 : parseInt(""),45662975328482 : parseInt(""),45662975361250 : parseInt(""),45662975394018 : parseInt(""),45662975426786 : parseInt(""),45662975459554 : parseInt(""),45662975492322 : parseInt(""),45662975525090 : parseInt(""),45662975557858 : parseInt(""),45662975590626 : parseInt(""),45662975623394 : parseInt(""),45662975656162 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {45662946033890 : null,45662975295714 : null,45662975328482 : null,45662975361250 : null,45662975394018 : null,45662975426786 : null,45662975459554 : null,45662975492322 : null,45662975525090 : null,45662975557858 : null,45662975590626 : null,45662975623394 : null,45662975656162 : null,}; window._RestockRocketConfig.variantsShippingText = {45662946033890 : "",45662975295714 : "",45662975328482 : "",45662975361250 : "",45662975394018 : "",45662975426786 : "",45662975459554 : "",45662975492322 : "",45662975525090 : "",45662975557858 :
hopify-404/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 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 b

<

Services  Brake SparesACHE_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 || !settings.m
if (value !== null && value !== undefined && value !== '') { settings[key] = value; } }); } else { console.debug('STOQ - No translated fields found for locale:', normalizedLocale); } delete settings.translations; return settings; } catch (e) { console.debug('STOQ - error applying translations:', e); return settings; } } // First try to get settings from metafields with expiry check const cachedSettings = window._RestockRocketConfig.cachedSettings; const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null; if (validCachedSettings) { console.debug('STOQ - using cached settings'); initializeScripts(validCachedSettings); } else { console.debug('STOQ - fetching fresh settings'); const headers = { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' }; if (window.Shopify?.theme?.role ===
img src="//projektride.co.uk/cdn/shop/files/voile-straps-32-inch-nylon-buckle-blue-1_2048x2048.jpg?v=1720100831" alt="Voile 32″ Nylon Buckle Strap" class="mfp-zoom-in-cur" id="34187515068642"> img src="//projektride.co.uk/cdn/shop/files/voile-straps-15-inch-nylon-buckle-grey-1_2048x2048.jpg?v=1720098274" alt="Voile 15″ Nylon Buckle Strap" class="mfp-zoom-in-cur" id="34187127193826">

<<
Hire Lazer Compact Helmet
a class="product__media product__media--featured" href="/products/hire-smith-convoy-helmet" title="Hire Lazer Compact Helmet" aria-label="Hire Lazer Compact Helmet" style="background-image: url(//projektride.co.uk/cdn/shop/files/my2023_tempo-kineticore-black_right_1400x1011800x600-removebg-preview_1_600x.png?v=1747484784)"> span class="visually-hidden">Hire Lazer Compact Helmetimg src="//projektride.co.uk/cdn/shop/files/voile-straps-32-inch-nylon-buckle-cyan-white-1-1024x1024_98x.jpg?v=1720100830" alt="" class="product-single__thumbnail-img"> a class="product__media product__media--featured" href="/products/hire-smith-convoy-helmet" title="Hire Lazer Compact Helmet" aria-label="Hire Lazer Compact Helmet" style="background-image: url(//projektride.co.uk/cdn/shop/files/my2023_tempo-kineticore-black_right_1400x1011800x600-removebg-preview_1_600x.png?v=1747484784)"> Enigma > span class="visually-hidden">Hire Lazer Compact Helmet
> > Hire Lazer Compact Helmet Hire Lazer Compact Helmetimg src="//projektride.co.uk/cdn/shop/files/voile-straps-32-inch-nyloKona
span class="visually-hidden">Hire Ortlieb 40L Pannier Bags span class="visually-hidden">Hire Ortlieb 40L Pannier BagsSecond-Hand Bikes
>
ProjektRideBuy Sell Ride Confident
Header Image
FAQ
Questions and answers
I'm looking to find out more information about a product, where can I find this?

Book a Service



Stems© 2025,
ProjektRide
Locks

  • Tools & Maintenance Helmets
Gloves