Search
Cart
0 items
Sorry, looks like we don't have enough of this product.
Add order notes
Special instructions for seller
Your cart is currently empty.
.cart-collection__title { --text: #ffffff; }
Shop All New Bikes
Road / Gravel / Touring Bikes
Hybrid / City Bikes
Mountain Bikes
Electric Bikes
Kids Bikes
Frames
Shop by Brand
See More
Gloria
Trek
Amflow
Yeti
Ridgeback
Brother
Genesis
Singular
Enigma
Frog
Kona
Surly
UTO (ex Eovolt)
Early Rider
Brother<
<
& !Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) { console.debug('STOQ - locale not explicitly translated, will use default language from cache'); } } 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
Genesis 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') try { const _stoqInitConfig = window._RestockRocketConfig; const _stoqDetectedVariantIds = (_stoqInitConfig.product && Array.isArray(_stoqI
liquid_cache_age: _stoqInitConfig.liquidCacheAge, inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '', inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId], }); } catch (e) { console.debug('STOQ - stoq_initialized publish failed:', e); } try { var _sqTrack = window._RestockRocketConfig; if (_sqTrack.preordersConfigured) { document.addEventListener('click', function (e) { try { var t = e.target; if (!t || !t.closest) return; var host = t.closest('.shopify-payment-button, shopify-payment-terms'); if (!host) return; var channel = host.matches && host.matches('shopify-payment-terms') ? 'shop_pay_installments' : 'buy_now'; var form = host.closest('form'); var vidEl = form && form.querySelector('[name="id"]'); var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || '';
ck.product.id) || '', channel: channel, market_id: _sqTrack.marketId || '', country_code: _sqTrack.countryIsoCode || '', page_type: _sqTrack.pageType || '', cart_token: _sqTrack.cartToken || '', page_url: (window.location && window.location.href) || '', properties: { is_preorder_variant: (function () { var vid = Number(variantId); var has = function (a) { return Array.isArray(a) && a.indexOf(vid) !== -1; }; return has(_sqTrack.preorderVariantIds) || has(_sqTrack.cachedPreorderVariantIds && _sqTrack.cachedPreorderVariantIds.preorder_variant_ids); })(), in_enabled_plan: !!_sqPlan, is_instock_variant: (function () { var has = function (a) { return Array.isArray(a) && a.indexOf(_sqVidNum) !== -1; }; return has(_sqTrack.inStockVariantIds) || h
Singular } catch (err) { } }, true); } } catch (e) { } function applyTranslations(settings) { try { 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) { 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
- no cart selling plan updates needed'); } }) .catch(error => { console.error('STOQ - error updating cart selling plans:', error); }); } }); } (function loadStorefrontSettings() { const cfg = window._RestockRocketConfig; if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) return; function run() { const query = 'query StoqSettings($namespace: String!) { shop { metafield(namespace: $namespace, key: "settings") { value } } }'; fetch( `https://${cfg.shop}/api/2025-07/graphql.json`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken, }, body: JSON.stringify({ query: query, variables: { namespace: cfg.metafieldNamespace } }), } ) .then(function(response) { if (!response.ok) { throw new Error('Storefront API HTTP ' + response.s
ings; 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 n
Enigmaconsole.error('STOQ - apply failed for ' + endpoint + ':', applyError); throw applyError; } }) .catch(function(error) { console.debug(`STOQ - using cached ${endpoint}:`, error.message); }); } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); if (!window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid) { console.debug('STOQ - Liquid cache stale, refreshing selling_plans + integrations'); Promise.race([ Promise.all([ fetchEmbedConfig('selling_plans', function(data) { if (data && Array.isArray(data.plans)) { window._RestockRocketConfig.sellingPlans = data.plans; window._RestockRocketConfig.disabledSellingPlanIds = data.disabled_plan_ids || []; } }), fetchEmbed
indow._RestockRocketConfig.disabledSellingPlanIds.length > 0; const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds; const collectionScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlCollection : window._RestockRocketConfig.scriptUrlCollectionBis; const productScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlProduct : window._RestockRocketConfig.scriptUrlProductBis; const pageType = window._RestockRocketConfig.pageType; const collectionPageTypes = ['collection', 'index', 'search', 'page']; if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pageType}_enabled`])) { createRestockRocketScript(collectionScriptUrl); } else if(pageType === 'product') { createRestockRocketScript(productScriptUrl); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketC
Open search bar
Search for products on our site
Suggested search terms
About Us
Contact Us
Blog
Track Service Progress
Building Your Bike From the Box
Insure Your Bike
Privacy Policy
Cookie Policy
Terms of Service
Refund policy
Open cart
See More
Custom Builds
My AccountCycle To Work Schemes
Insure Your Bike
Open cart
Book a Service
Handlebars
Tubeless
Tools & Maintenance
Socks
1
Essentials
See More
1
Cleaners, Degreasers and Lubrication
Accessories2
Maintenance
3
Sell Your Bike
4
Contact Us
Finance5
6
7
Log in
Create account8
9
Search
10 +
Country
GBP£
Quantity
Åland Islands (EUR€) Decrease Quantity
Albania (ALLL) Increase Quantity
Algeria (DZDد.ج)
Andorra (EUR€)
Angola (GBP£)
Armenia (AMDդր.)
Ascension Island (SHP£)
Austria (EUR€)
Belarus (GBP£)
Belgium (EUR€)
Benin (XOFFr)
Bosnia & Herzegovina (BAMКМ)
Botswana (BWPP)
British Indian Ocean Territory (USD$)
Bulgaria (EUR€)
Burkina Faso (XOFFr)
Burundi (BIFFr)
Cameroon (XAFCFA)
Cape Verde (CVE$)
Central African Republic (XAFCFA)
Frames
Chad (XAFCFA)
Shop by Brand
See More
Comoros (KMFFr)
Gloria
Congo - Brazzaville (XAFCFA)
Trek
Congo - Kinshasa (CDFFr)
Amflow
YetiCôte d’Ivoire (XOFFr)
Ridgeback
Croatia (EUR€)
Brother
Cyprus (EUR€)
Genesis
SingularCzechia (CZKKč)
Enigma
Denmark (DKKkr.)
Frog
Djibouti (DJFFdj)
Kona
Servicing Handlebars
Chad (XAFCFA) Book a Service Stems
Show more
Show lessWorkshop PricesComoros (KMFFr) Grips & Bar-Tape
Cycle to Work Headsets
{"id":45820517220578,"title":"Black","option1":"Black","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Ortlieb Back-Roller Core - Black","public_title":"Black","options":["Black"],"price":7000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}} Congo - Brazzaville (XAFCFA)
Delivery & Returns
Quantity Congo - Kinshasa (CDFFr)
Information
Mon - Fri: 09:00 - 18:30 Brakes
1Sat: 9:00 - 16:00
Sun: ClosedCôte d’Ivoire (XOFFr) See More
0131 374 5324
Newington Road
Edinburgh 1 EH9 1QNCroatia (EUR€) Complete Brakes [email protected]
Brake Rotors
Cyprus (EUR€)
2
Brake Pads
await import("//projektride.co.uk/cdn/shopifycloud/shop-js/modules/v2/loader.shop-follow-button.en.esm.js"); Czechia (CZKKč)
Brake Spares
3
Denmark (DKKkr.)
Country Forks
4 See More
GBP£Djibouti (DJFFdj)
5 Åland Islands (EUR€) Egypt (EGPج.م)
Albania (ALLL) Equatorial Guinea (XAFCFA)
6
Algeria (DZDد.ج) Eritrea (GBP£)
7
Andorra (EUR€) Estonia (EUR€)
8 Angola (GBP£) Eswatini (GBP£)
Armenia (AMDդր.) Ethiopia (ETBBr)
Ascension Island (SHP£) Faroe Islands (DKKkr.)
Austria (EUR€) Finland (EUR€)
Belarus (GBP£) France (EUR€)
Belgium (EUR€) French Southern Territories (EUR€)
Benin (XOFFr) Gabon (XOFFr)
Bosnia & Herzegovina (BAMКМ) Gambia (GMDD)
Botswana (BWPP) Georgia (GBP£)
British Indian Ocean Territory (USD$)