Headsets

Brakes
|| !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 gracefully use default locale from base fields if (window._RestockRocketConfig.normalizedLocale && !Object.pr
<
!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 memo
gs 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 === 'main') { headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema_name; headers['X-Shopify-Theme-Schema-Version'] = window.Shopify.theme.schema_version; headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id; } fetch( `${window._RestockRocketConfig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`, { headers } ) Cockpit maxRetries) { console.debug(`STOQ - API not ready, retry ${attempt}/${maxRetries}`); setTimeout(() => attemptCartCheck(attempt + 1), retryDelay); } else { console.debug('STOQ - API not loaded after max retries, skipping cart selling plan check'); } } attemptCartCheck(); }

Grips & Bar-Tape See More<
Brakes <
lasses }}"> Headsets
span class="visually-hidden">Hire Lazer Compact HelmetHandlebars

Tyres

Tubes
Tubeless
#ProductTemplate--template--15326745395426__main { background: #ffffff; } .shop-pay-terms { --payment-terms-background-color: #ffffff }
img src="//projektride.co.uk/cdn/shop/files/av015_03_2048x2048.jpg?v=1729939520" alt="AtranVelo Epic Side Triple-X Basket, 26 Litre" class="mfp-zoom-in-cur" id="34865595416802"> img src="//projektride.co.uk/cdn/shop/files/av015_02_2048x2048.jpg?v=1729939520" alt="AtranVelo Epic Side Triple-X Basket, 26 Litre" class="mfp-zoom-in-cur" id="34865595384034">
img src="//projektride.co.uk/cdn/shop/files/av015_2048x2048.jpg?v=1729939521" alt="AtranVelo Epic Side Triple-X Basket, 26 Litre" class="mfp-zoom-in-cur" id="34865595449570">

    img src="//projektride.co.uk/cdn/shop/files/av015_03_98x.jpg?v=1729939520" alt="" class="product-single__thumbnail-img">
  • img src="//projektride.co.uk/cdn/shop/files/av015_02_98x.jpg?v=1729939520" alt="" class="product-single__thumbnail-img">
  • img src="//projektride.co.uk/cdn/shop/files/av015_98x.jpg?v=1729939521" alt="" class="product-single__thumbnail-img"> Home<
    /<
Bags - Transportation
<
Rear Suspension

Frames

Finishing Kit
  • Tyres
QUICK LINKS
Sell Your BikeHope
About UsBook a Service Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable