Sun: Closed
  • Header Image
    <
    44mm, ZS44/28.6 upper, EC44/40 lower (not included)
    Maximum tyre clearance: 
    -width\" data-element=\"main\" data-pb-style=\"DCT6F41\"\u003e\u003cpicture\u003e\u003csource media=\"(max-width: 768px)\" srcset=\"https:\/\/www.freewheel.co.uk\/media\/headless_websites\/genesis\/cdf\/cdf_20\/800x1000-cdf20-keyfeature-b.jpg\" data-element=\"lazy_mobile_image\"\u003e\u003cimg alt=\"\" title=\"\" src=\"https:\/\/www.freewheel.co.uk\/media\/headless_websites\/genesis\/cdf\/cdf_20\/800x1000-cdf20-keyfeature-b.jpg\" data-element=\"lazy_image\"\u003e\u003c\/picture\u003e\u003c\/figure\u003e\n\u003ch3 class=\"text-xl font-medium\" data-content-type=\"heading\" data-appearance=\"default\" data-element=\"main\" data-pb-style=\"XNCNSQC\"\u003eRenowned Brakes\u003c\/h3\u003e\n\u003cdiv class=\"h-40\" data-content-type=\"text\" data-appearance=\"default\" data-element=\"main\" data-pb-style=\"A2WJ1WU\"\u003e\n\u003cp id=\"NM8TUA9\"\u003eThe TRP Spyre's dual piston actuated design combines the easy maintenence of a mechanical brake with the improved lever feel and stopping power from a hydraulic system.
    03e\n\u003cdiv class=\"h-40\" data-content-type=\"text\" data-appearance=\"default\" data-element=\"main\" data-pb-style=\"TNL9XH5\"\u003e\n\u003cp id=\"NM8TUA9\"\u003eTaking advantage of the 26mm Amplitude G100 wheelsets, the Croix De Fer 20 comes equipped with Maxxis Rambler 45mm tubeless ready tyres. A true year round, go anywhere tread pattern that isn't limiting on smoother roads either.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli class=\"carousel__slide carousel__slide--clone carousel__slide--prev\" aria-hidden=\"true\"\u003e\n\u003cdiv class=\"carousel__item pagebuilder-column\" data-content-type=\"slide\"\u003e\n\u003cfigure class=\"pagebuilder-image\" data-content-type=\"image\" data-appearance=\"full-width\" data-element=\"main\" data-pb-style=\"PCR96OR\"\u003e\u003cpicture\u003e\u003csource media=\"(max-width: 768px)\" srcset=\"https:\/\/www.freewheel.co.uk\/media\/headless_websites\/genesis\/cdf\/cdf_20\/800x1000-cdf20-keyfeature-d.jpg\" data-element=\"lazy_mob " data-content-type=\"column-line\" data-element=\"main\" data-pb-style=\"EMGT3WK\"\u003e\n\u003cdiv class=\"pagebuilder-column\" data-content-type=\"column\" data-appearance=\"full-height\" data-background-images=\"{}\" data-element=\"main\" data-pb-style=\"BFOYQV4\"\u003e\n\u003ch3 class=\"text-xl font-semibold\" data-content-type=\"heading\" data-appearance=\"default\" data-element=\"main\" data-pb-style=\"TBL3F9P\"\u003eFrame \u0026amp; Fork\u003c\/h3\u003e\n\u003cdiv class=\"leading-normal text-lg\" data-content-type=\"text\" data-appearance=\"default\" data-element=\"main\"\u003e\n\u003cul\u003e\n\u003cli\u003eGenesis Mjolnir Chromoly Tubing\u003c\/li\u003e\n\u003cli\u003eAmplitude G100 Chromoly Fork\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pagebuilder-column\" data-content-type=\"column\" data-appearance=\"full-height\" data-background-images=\"{}\" data-element=\"main\" data-pb-style=\"Q0IVXSE\"\u003e\n\u003ch3 class=\"text-xl font-semibold\" data-cont =\"main\"\u003e\n\u003cul\u003e\n\u003cli\u003eAmplitude G100 Finishing Kit\u003c\/li\u003e\n\u003cli\u003eMadison Flux Switch Saddle\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pagebuilder-column-group\" data-background-images=\"{}\" data-content-type=\"column-group\" data-appearance=\"default\" data-grid-size=\"12\" data-element=\"main\" data-pb-style=\"IBXNDMI\"\u003e\n\u003cdiv class=\"pagebuilder-column-line\" data-content-type=\"column-line\" data-element=\"main\" data-pb-style=\"VEM08K2\"\u003e\n\u003cdiv class=\"pagebuilder-column\" data-content-type=\"column\" data-appearance=\"full-height\" data-background-images=\"{}\" data-element=\"main\" data-pb-style=\"IBUASY2\"\u003e\n\u003ch3 class=\"text-xl font-semibold\" data-content-type=\"heading\" data-appearance=\"default\" data-element=\"main\" data-pb-style=\"TSE5AA7\"\u003eWheelset\u003c\/h3\u003e\n\u003cdiv class=\"leading-normal text-lg\" data-content-type=\"text\
    < urface and excellent grip in all weather conditions.!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[key || 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 enabled for ${window._RestockRocketConfig.pageType}`); } // Dispatch custom event when app is loaded // Cart selling plan updates will be triggered by stoq:preorder-api-ready event const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabl
    Includes a pair of Brooks natural rubber Bar End Plugs {"id":8055066034402,"title":"Brooks Cambium Rubber Tape","handle":"brooks-cambium-rubber-tape","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp\u003ePadded rubber tape with a tough, durable surface and excellent grip in all weather conditions.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e3mm thick\u003c\/li\u003e\n\u003cli\u003eIncludes a pair of Brooks natural rubber Bar End Plugs\u003c\/li\u003e\n\u003c\/ul\u003e","published_at":"2023-03-18T11:54:36+00:00","created_at":"2023-03-18T11:54:36+00:00","vendor":"ProjektRide","type":"Apparel \u0026 Accessories","tags":["Bike Packing","brooks","Grips \u0026 Bar-tape","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":3999,"price_min":3999,"price_max":3999,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":43936070631650,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"CT03000A16100","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Brooks Cambium Rubber Tape","public_title":null,"options":["Default Title"],"price":3999,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/35225-pm.png?v=1679140478","\/\/projektride.co.uk\/cdn\/shop\/products\/35226-pm.png?v=1679140477","\/\/projektride.co.uk\/cdn\/shop\/products\/35227-pm.png?v=1679140478"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/products\/35225-pm.png?v=1679140478","options":["Title"],"media":[{"alt":null,"id":31694679212258,"position":1,"preview_image":{"aspect_ratio":1.0,"height":776,"width":776,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/35225-pm.png?v=1679140478"},"aspect_ratio":1.0,"height":776,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/35225-pm.png?v=1679140478","width":776},{"alt":null,"id":31694679245026,"position":2,"preview_image":{"aspect_ratio":1.0,"height":776,"width":776,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/35226-pm.png?v=1679140477"},"aspect_ratio":1.0,"height":776,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/35226-pm.png?v=1679140477","width":776},{"alt":null,"id":31694679277794,"position":3,"preview_image":{"aspect_ratio":1.0,"height":776,"width":776,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/35227-pm.png?v=1679140478"},"aspect_ratio":1.0,"height":776,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/35227-pm.png?v=1679140478","width":776}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp\u003ePadded rubber tape with a tough, durable surface and excellent grip in all weather conditions.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e3mm thick\u003c\/li\u003e\n\u003cli\u003eIncludes a pair of Brooks natural rubber Bar End Plugs\u003c\/li\u003e\n\u003c\/ul\u003e"}

    <
    <
    <
    >
    Hire Ortlieb 40L Pannier Bags> div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.32_9d81277b-124e-4fdc-8a0f-fbfb40a9343d_600x.png?v=1691610357)">
    • Life Systems Pocket First Aid Kit - HIRE> a class="product__media product__media--featured" href="/collections/all-new-bikes/products/life-systems-pocket-first-aid-kit-hire" title="Life Systems Pocket First Aid Kit - HIRE" aria-label="Life Systems Pocket First Aid Kit - HIRE" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.22_5c0e6e2d-1913-4fd1-a90d-b486895960b6_600x.png?v=1691610357)"> Life Systems Pocket First Aid Kit - HIRE
    span class="visually-hidden">Life Systems Pocket First Aid Kit - HIRE div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.32_9d81277b-124e-4fdc-8a0f-fbfb40a9343d_600x.png?v=1691610357)">
    >
    Location 82 Newington RoadEdinburghEH9 1QN Email

    tings.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 <
    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 || !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[key
    ]; 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; } } // Setup event listener for cart selling plan updates / / This must be called before any scripts are loaded to avoid race conditions function setupCartSellingPlanUpdater(settings) { if (!settings || !settings.preorder_enabled) { return; } // Listen for stoq:preorder-api-ready event dispatched by preorder.js window.addEventListener('stoq:preorder-api-ready', function(event) { console.debug('STOQ - Preorder API ready, updating cart selling plans'); if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { window._RestockRocket.updateCartSellingPlans() .then(hasUpdates => { if (hasUpdates) { console.debug('STOQ - cart selling plans updated successfully'); } else { console.debug('STOQ - no cart selling plan updates needed'); } }) .catch(error => { console.error('STOQ - error updating cart selling plans:', error); }); } }); } // First try to get settings from metafields with ex
    piry 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 } ) .then(function(response) { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { // If request failed and we have cached settings (even if expired), use them as fallback if (cachedSettings) { console.debug('STOQ - using expired cached settings as fallback'); initializeScripts(cachedSettings); } else { console.error('STOQ - failed to load settings:', error); } }) .catch(function(e) { console.error(e) }) } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); // Setup cart selling plan updater BEFORE loading any scripts to avoid race conditions setupCartSellingPlanUpdater(settings); if(settings.enable_app) {

    FAQ

    Questions and answers