Cleaners, Degreasers and Lubrication
Accessories
Maintenance
Sell Your Bike
Contact Us
Finance
Log in
Create account
Search
Essentials
See More
Country
Cleaners, Degreasers and Lubrication
GBP£
Accessories
Åland Islands (EUR€)
Maintenance
Albania (ALLL)
Sell Your Bike
Algeria (DZDد.ج)
Contact Us
Andorra (EUR€)
Finance
Angola (GBP£)
Log in
Armenia (AMDդր.)
Create account
Ascension Island (SHP£) Search
Austria (EUR€)
Cart
Belarus (GBP£) 0 items
Belgium (EUR€)
Benin (XOFFr) Sorry, looks like we don't have enough of this product.
Bosnia & Herzegovina (BAMКМ)
Botswana (BWPP)
Add order notes
British Indian Ocean Territory (USD$)
Special instructions for seller
Bulgaria (EUR€)
Burkina Faso (XOFFr)
Your cart is currently empty.
.cart-collection__title { --text: #ffffff; }
Burundi (BIFFr)
Cameroon (XAFCFA)
Items
Cape Verde (CVE$)
Free
Central African Republic (XAFCFA)
Chad (XAFCFA) Checkout
Free
Comoros (KMFFr)
 
Congo - Brazzaville (XAFCFA)  
Congo - Kinshasa (CDFFr)
Côte d’Ivoire (XOFFr) Shipping & taxes calculated at checkout
Croatia (EUR€)
Cyprus (EUR€) :root { --header-height: 60px; --header-sticky-height: 60px; --header-background-height: 60px; } :root { --full-height: calc(100vh - var(--header-sticky-height)); } .main-content > .shopify-section.supports-transparent-header:first-child [data-prevent-transparent-header] { --full-height: var(--content-full); } .site-header--has-border { --border-color: currentcolor; --border-opacity: 0.0; }
Czechia (CZKKč)
Open navigation menu
.logo__image-link { width: 100px; height: 28px; } .has-scrolled .logo__image-link { width: 100px; height: 28px; }
Denmark (DKKkr.)
Djibouti (DJFFdj)
Open search bar
Egypt (EGPج.م)
Equatorial Guinea (XAFCFA)
Search for products on our site
Eritrea (GBP£)
Estonia (EUR€)
Eswatini (GBP£)
Ethiopia (ETBBr)
Faroe Islands (DKKkr.)
Finland (EUR€)
France (EUR€)
French Southern Territories (EUR€)
Gabon (XOFFr)
Gambia (GMDD)
Georgia (GBP£)
Germany (EUR€)
Ghana (GBP£)
Gibraltar (GBP£)
Greece (EUR€)
Greenland (DKKkr.)
Guadeloupe (EUR€)
Guernsey (GBP£)
f (o) _sqAlwaysPlanIds.push(Number(o.shopify_selling_plan_id)); }); } }); var _sqAllocAlways = function (id) { var a = _sqGateAlloc && _sqGateAlloc[id]; return Array.isArray(a) && a.some(function (planId) { return planId && _sqAlwaysPlanIds.indexOf(Number(planId)) !== -1; }); }; var _sqArm = false; if (_sqOn && (_sqc.preordersConfigured || _sqAlways.length || _sqAlwaysPlanIds.length)) { if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) { _sqArm = _sqc.product.variants.some(function (v) { return _sqPre.indexOf(Number(v.id)) !== -1 || _sqAlways.indexOf(Number(v.id)) !== -1 || _sqAllocAlways(Number(v.id)) || (_sqc.inlinePreorderIdsDropped === true && (_sqc.variantsInventoryPolicy || {})[v.id] === 'continue' && (_sqc.variantsInventoryQuantity || {})[v.id] <
= 0); }); } else { _sqArm = (_sqc.integrations || []).some(function (i) { return i && i.type === 'featured_product' && i.enabled && Array.isArray(i.page_types) && i.page_types.indexOf(_sqc.pageType) !== -1; }); } } if (_sqArm && document.documentElement) { _sqc.acceleratedGateArmed = true; document.documentElement.classList.add('stoq-buy-now-pending'); setTimeout(function () { document.documentElement.classList.remove('stoq-buy-now-pending'); }, 6000); } } catch (e) { } window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/01a1cf87-0c5a-7dbe-b46c-5802cf5d64ec/restockrocket-1-641/assets/restockrocket-product.js' window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/01a1cf87-0c5a-7dbe-b46c-5802cf5d64ec/restockrocket-1-641/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptUrlCollectionFull = 'https://cdn.shopify.com/extensiCleaners, Degreasers and Lubrication See Moreons/01a1cf87-0c5a-7dbe-b46c-5802cf5d64ec/restockrocket-1-641/assets/restockrocket-collection-full.js' window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/01a1cf87-0c5a-7dbe-b46c-5802cf5d64ec/restockrocket-1-641/assets/restockrocket-product-bis.js' window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/01a1cf87-0c5a-7dbe-b46c-5802cf5d64ec/restockrocket-1-641/assets/restockrocket-collection-bis.js' window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) window._RestockRocketConfig.host = (window._RestockRocketConfig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://ext.stoqapp.com' try { const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; } catch (
e) { window._RestockRocketConfig.appVersion = ''; } const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; const LIQUID_CACHE_MAX_AGE = 15 * 60; const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; window._RestockRocketConfig.liquidCacheAge = null; } else { const now = Math.floor(Date.now() / 1000); const liquidCacheAge = now - liquidRenderedAt; window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); if (liquidCacheAge Log inStandard / 396Wh <
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 <
= 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; } if (settings.multi_language_enabled) { if (!settings.translations) { console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); return null; } if (window._RestockRocketConfig.normalizedLocale &Accessories & !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
< Custom Builds for sale 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.crossOrigin = 'anonymous'; restockRocketScriptElement.onerror = function () { restockRocketScriptElement.onerror = null; const plainScriptElement = document.createElement('script'); plainScriptElement.setAttribute('defer', 'defer'); plainScriptElement.src = scriptUrl; document
.body.appendChild(plainScriptElement); }; restockRocketScriptElement.src = scriptUrl; document.body.appendChild(restockRocketScriptElement); } createRestockRocketContainer() console.debug('STOQ - extension activated') try { const _stoqInitConfig = window._RestockRocketConfig; const _stoqDetectedVariantIds = (_stoqInitConfig.product && Array.isArray(_stoqInitConfig.product.variants)) ? _stoqInitConfig.product.variants.map(function(v) { return v.id }) : []; const _stoqSelectedVariantId = _stoqInitConfig.selected_variant_id; var _stoqPageSeq = 0; try { _stoqPageSeq = (parseInt(window.sessionStorage.getItem('_stoq_pls') || '0', 10) || 0) + 1; window.sessionStorage.setItem('_stoq_pls', String(_stoqPageSeq)); } catch (e) { } Shopify?.analytics?.publish?.('stoq_initialized', { cart_token: _stoqInitConfig.cartToken || '', page_url: window.location.origin + window.location.pathname, page_type: _stoqInitConfig.pageType || '', Create account shop_domain: _stoqInitConfig.shop || '', market_id: _stoqInitConfig.marketId || '', country_code: _stoqInitConfig.countryIsoCode || '', detected_variant_ids: _stoqDetectedVariantIds, selected_variant_id: _stoqSelectedVariantId || '', page_load_seq: _stoqPageSeq, liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0, app_version: _stoqInitConfig.appVersion || '', 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 || ''; var _sqVidNum = Number(variantId); var _sqPlan = null; var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : []; var _sqMktId = Number(_sqTrack.marketId); var _sqOffersOn = !!(_sqTrack.readFlags && _sqTrack.readFlags.enable_storefront_plan_offers === true); var _sqAlloc = _sqOffersOn ? ((_sqTrack.offerAllocations && _sqTrack.offerAllocations[_sqVidNum]) || (_sqTrack.variantSellingPlanIds && _sqTrack.variantSellingPlanIds[_sqVidNum])) : null; var _sqPlanIds = function (pl) Maintenance { var ids = [pl.shopify_selling_plan_id, pl.default_shopify_selling_plan_id]; (Array.isArray(pl.payment_options) ? pl.payment_options : []).forEach(function (o) { ids.push(o && o.shopify_selling_plan_id); }); return ids.filter(function (id) { return id != null; }).map(Number); }; var _sqForVariant = function (pl) { if (!pl || !pl.enabled) return false; if (Array.isArray(_sqAlloc)) { var ids = _sqPlanIds(pl); return _sqAlloc.some(function (id) { return ids.indexOf(Number(id)) !== -1; }); } return Array.isArray(pl.variant_ids) && pl.variant_ids.indexOf(_sqVidNum) !== -1; }; _sqPlans.forEach(function (pl) { if (!_sqPlan && _sqForVariant(pl) && pl.markets_enabled && Array.isArray(pl.shopify_market_ids) && pl.shopify_market_ids.indexOf(_sqMktId) !== -1) { _sqPlan = pl; } }); if (!_sqPlan) {
_sqPlans.forEach(function (pl) { if (!_sqPlan && _sqForVariant(pl) && !pl.markets_enabled) { _sqPlan = pl; } }); } Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', { variant_id: variantId, product_id: (_sqTrack.product && _sqTrack.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.origin + window.location.pathname) || '', 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 && Long Range / 691 WhCustom Build Inspiration _sqTrack.cachedPreorderVariantIds.preorder_variant_ids) || (_sqTrack.inlinePreorderIdsDropped === true && (_sqTrack.variantsInventoryPolicy || {})[vid] === 'continue' && (_sqTrack.variantsInventoryQuantity || {})[vid]
< Search = 0); })(), in_enabled_plan: !!_sqPlan, is_instock_variant: (function () { var has = function (a) { return Array.isArray(a) && a.indexOf(_sqVidNum) !== -1; }; return has(_sqTrack.inStockVariantIds) || has(_sqTrack.cachedInStockVariantIds && _sqTrack.cachedInStockVariantIds.in_stock_variant_ids); })(), enrolled_plan_id: (_sqPlan && (_sqPlan.shopify_selling_plan_id || _sqPlan.shopify_selling_plan_group_id)) || '', enrolled_plan_provider: (_sqPlan && _sqPlan.inventory_provider) || '', block_enabled: !(_sqTrack.cachedSettings && _sqTrack.cachedSettings.block_accelerated_checkout === false) && !(_sqTrack.readFlags && _sqTrack.readFlags.accelerated_block_off === true), gate_armed: !!_sqTrack.acceleratedGateArmed, gate_active_at_click: !!(document.documentElement && document.documentElement.c
lassList.contains('stoq-buy-now-pending')), blocked: (function () { try { var rr = window._RestockRocket; return !!(rr && typeof rr.willBlockAcceleratedClick === 'function' && rr.willBlockAcceleratedClick(e)); } catch (err) { return false; } })(), }, }); } 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(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; } } function setupCartSellingPlanUpdater(settings) { window.addEventListener('stoq:inventory-data-loaded', function(event) { console.debug(
'STOQ - Inventory data loaded, 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); }); } }); } function storefrontGraphql(query, variables) { const cfg = window._RestockRocketConfig; let token = cfg.storefrontAccessToken || null; if (!token && typeof cfg.sk === 'string' && cfg.sk !== '') { try { token = atob(cfg.sk).split('').reverse().join('') || null; } catch (e) { token = null; } } if (!token || cfg.disableStorefrontApi === true) { return Promise.reject(new Error('Storefro nt API unavailable')); } return fetch( `https://${cfg.shop}/api/${cfg.storefrontApiVersion}/graphql.json`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Shopify-Storefront-Access-Token': token, }, body: JSON.stringify({ query: query, variables: variables }), } ) .then(function(response) { if (!response.ok) { throw new Error('Storefront API HTTP ' + response.status); } return response.json(); }) .then(function(body) { if (body && body.errors && body.errors.length) { throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', ')); } return body && body.data; }); } function fetchStorefrontShopMetafield(key) { const cfg = window._RestockRocketConfig; const query = 'query StoqShopMetafield($namespace: String!, $key: String!) { shop { metafield(namespace: $namespace, key: $key) { value } } }'; ret
urn storefrontGraphql(query, { namespace: cfg.metafieldNamespace, key: key }) .then(function(data) { const value = data && data.shop && data.shop.metafield && data.shop.metafield.value; if (!value) { throw new Error('Storefront API returned no ' + key + ' metafield value'); } return JSON.parse(value); }); } function fetchStorefrontSettings() { const query = 'query StoqSettings($namespace: String!) { shop { settings: metafield(namespace: $namespace, key: "settings") { value } translations: metafield(namespace: $namespace, key: "settings_translations") { value } } }'; return storefrontGraphql(query, { namespace: window._RestockRocketConfig.metafieldNamespace }) .then(function(data) { const settings = JSON.parse(data.shop.settings.value); if (!settings.updated_at) { throw new Error('settings metafield is not a settings payload'); } if (settings.single_locale_translations_inline) { settings.translations = data.shop.translations && JSON.parse(data .shop.translations.value); } if (settings.multi_language_enabled && !settings.translations) { throw new Error('settings metafield carries no translations'); } return settings; }); } 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; }
const storefrontRead = window._RestockRocketConfig.readFlags?.enable_storefront_settings_read === true ? Promise.race([ fetchStorefrontSettings(), new Promise(function(_, reject) { setTimeout(function() { reject(new Error('timed out')); }, 1500); }) ]).catch(function(error) { console.debug('STOQ - Storefront settings read failed, using setting.json:', error.message); }) : Promise.resolve(); storefrontRead .then(function(settings) { return settings || 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 (cachedSettings) { console.de bug('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 fetchEmbedConfig(endpoint, apply) { return fetch( `${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`, { headers: { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' } } ) .then(function(response) { if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`); return response.json(); }) .then(function(data) { try { apply(data); } catch (applyError) { console.error('STOQ - apply failed for ' + endpoint + ':', applyError); throw applyError; } }) .catch(function(error) { console.debug(`STOQ - using cached ${endpoint}:`, erro
r.message); }); } function refreshShopConfig(source) { const cfg = window._RestockRocketConfig; const viaEmbed = function() { return fetchEmbedConfig(source.endpoint, source.apply); }; const flagOn = !!cfg.readFlags && cfg.readFlags[source.flag] === true; if (!flagOn) { return viaEmbed(); } return fetchStorefrontShopMetafield(source.metafieldKey) .then(function(value) { if (!source.isValid(value)) { throw new Error(source.metafieldKey + ' metafield is not a valid ' + source.endpoint + ' payload'); } source.apply(value); console.debug('STOQ - refreshed ' + source.endpoint + ' from the Storefront API'); }) .catch(function(error) { console.debug('STOQ - Storefront ' + source.endpoint + ' read failed, using embed:', error.message); return viaEmbed(); }); } function refreshIntegrations() { const cfg = window._RestockRocketConfig; return refreshShopConfig({ endpoint: 'integrations', metafieldKey: 'in {"id":57622380970367,"title":"Black Matte \/ Standard \/ 396Wh","option1":"Black Matte","option2":"Standard \/ 396Wh","option3":null,"sku":"HB-HUMBER-DYNAMIC-CARGO-3-BLACK-MATTE-STANDARD-396WH","requires_shipping":true,"taxable":true,"featured_image":{"id":84655663579519,"product_id":15691980079487,"position":1,"created_at":"2026-05-27T14:56:56+01:00","updated_at":"2026-05-27T14:56:59+01:00","alt":"Humber Dynamic Cargo 3","width":2500,"height":1515,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/8026100210_Humber_Dynamic_Cargo_3_RD_Black_Mat_1_shadow.jpg?v=1779890219","variant_ids":[57622380970367]},"available":false,"name":"Humber Dynamic Cargo 3 - Black Matte \/ Standard \/ 396Wh","public_title":"Black Matte \/ Standard \/ 396Wh","options":["Black Matte","Standard \/ 396Wh"],"price":329900,"weight":45000,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":"Humber Dynamic Cargo 3","id":71143213334911,"position":1,"preview_image":{"aspect_ratio":1.65,"height":1515,"width":2500,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/8026100210_Humber_Dynamic_Cargo_3_RD_Black_Mat_1_shadow.jpg?v=1779890219"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}} Servicestegrations', flag: 'enable_storefront_integrations_read', isValid: function(value) { return Array.isArray(value); }, apply: function(data) { cfg.integrations = data; } }); } function refreshSellingPlans() { const cfg = window._RestockRocketConfig; return refreshShopConfig({ endpoint: 'selling_plans', metafieldKey: 'cachedSellingPlans', flag: 'enable_storefront_selling_plans_read', isValid: function(value) { return !!value && Array.isArray(value.plans); }, apply: function(data) { cfg.sellingPlans = data.plans; cfg.disabledSellingPlanIds = data.disabled_plan_ids || []; if (data && data.read_flags && typeof data.read_flags === 'object' && !Array.isArray(data.read_flags)) { cfg.readFlags = data.read_flags; } } }); } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - setti
ngs configured for ${window._RestockRocketConfig.pageType}`); const staleRefresh = !window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid; if (staleRefresh) { console.debug('STOQ - refreshing selling_plans + integrations (Liquid cache stale)'); Promise.race([ Promise.all([refreshSellingPlans(), refreshIntegrations()]), new Promise(function(resolve) { setTimeout(resolve, 1000); }) ]).then(function() { loadScripts(settings); }); return; } loadScripts(settings); } function loadScripts(settings) { setupCartSellingPlanUpdater(settings); if(settings.enable_app) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); }) const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans) && wSell Your Bike indow._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; }); const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds) && window._RestockRocketConfig.disabledSellingPlanIds.length > 0; const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds; const pageType = window._RestockRocketConfig.pageType; const preorderUiOnPage = (settings.preorder_enabled && settings[`preorder_${pageType}_enabled`]) || window._RestockRocketConfig.integrations.some(function(integration) { return (integration.type === 'quick_buy' || integration.type === 'featured_product') && integration.enabled && integration.page_types.includes(pageType); }) || /\b(renderPreorderButton|updateAddToCartButton|updateAddToCartForms|setupAddToCartForm|teardownAddToCartForm|addDiscountedPrice|removeDiscountedPrice)\b/.test(settings.js_config || ''); const preorderCollect
ionScriptUrl = preorderUiOnPage ? window._RestockRocketConfig.scriptUrlCollectionFull : window._RestockRocketConfig.scriptUrlCollection; const collectionScriptUrl = usePreorderBuild ? preorderCollectionScriptUrl : window._RestockRocketConfig.scriptUrlCollectionBis; const productScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlProduct : window._RestockRocketConfig.scriptUrlProductBis; 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(preorderCollectionScriptUrl); } else if(usePreorderBuild) { createRestockRocketScript(preorderColl Cart See MoreectionScriptUrl); } else { console.debug(`STOQ - no scripts enabled for ${pageType}`); } const wishlistIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'wishlist' && integration.enabled; }); if (wishlistIntegration) { createRestockRocketScript(window._RestockRocketConfig.scriptHost + 'restockrocket-wishlist.js'); if ((wishlistIntegration.page_types || []).indexOf(pageType) !== -1) { let wishlistHeartsRequested = false; const wishlistHeartTarget = pageType === 'product' ? '[data-stoq-wishlist-heart]' : '[data-stoq-wishlist-heart], a[href*="/products/"]'; // A product page's heart places itself on the product image unless the merchant turned that off. const wishlistImageHeart = pageType === 'product' && (wishlistIntegration.configuration || {}).product_heart_auto !== false; const loadWishlistHearts = function() { if (wishlistHeartsRequested
|| !(wishlistImageHeart || document.querySelector(wishlistHeartTarget))) return; wishlistHeartsRequested = true; createRestockRocketScript(window._RestockRocketConfig.scriptHost + 'restockrocket-wishlist-hearts.js'); }; loadWishlistHearts(); document.addEventListener('shopify:section:load', loadWishlistHearts); } if (document.querySelector('[data-stoq-wishlist-page]')) { createRestockRocketScript(window._RestockRocketConfig.scriptHost + 'restockrocket-wishlist-page.js'); } try { if (localStorage.getItem('stoq_wl_host') !== window._RestockRocketConfig.scriptHost) localStorage.setItem('stoq_wl_host', window._RestockRocketConfig.scriptHost); } catch (e) {} try { const guestWishlist = window._RestockRocketConfig.customer && !localStorage.getItem('stoq_wl_c') && JSON.parse(localStorage.getItem('stoq_wl')); if (Array.isArray(guestWishlist) && guestWishlist.length) { 0 items createRestockRocketScript(window._RestockRocketConfig.scriptHost + 'restockrocket-wishlist-prompt.js'); } } catch (e) {} } const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabled: settings.enable_app, settings: settings, preorderEnabled: settings.preorder_enabled } }); console.debug('STOQ - dispatching app loaded event'); window.dispatchEvent(appLoadedEvent); } }
Quantity html.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}
Contact Us
1Workshop
Finance See More
Sorry, looks like we don't have enough of this product.
1
Open search bar Workshop Prices
Book a Service
2
Track Your Service
Search for products on our site
Add order notes
3
Other
Special instructions for sellerSee More
4
Custom Builds
Gibraltar (GBP£) Custom Build Inspiration
Sell Your Bike
Greece (EUR€)
Contact UsServices
Greenland (DKKkr.) See More
Finance
Guadeloupe (EUR€)
Log inWorkshop
See More
Guernsey (GBP£)
Create account
Workshop Prices
Guinea (GNFFr) Search
Book a Service
Guinea-Bissau (XOFFr)
Track Your Service
Cart
Hungary (HUFFt) 0 items
Forks
See More
Front Suspension
Rear Suspension
Finishing Kit
See More
Tyres
Tubes
Tubeless
Skip to content
/* Prevent CLS on page load */ :root { --announcement-height: calc(0.75rem * 1.1 * 1.5 + 10px * 2 + var(--BORDER-WIDTH)); } @media screen and (min-width: 768px) { :root { --announcement-height: calc(0.75rem * 1.1 * 1.5 + 10px * 2 + var(--BORDER-WIDTH)); } } @font-face { font-family: "Space Mono"; font-weight: 400; font-style: normal; font-display: swap; src: url("//projektride.co.uk/cdn/fonts/space_mono/spacemono_n4.9ee60bbbb57a3b43dbcb22a7f53e18140cb3b40f.woff2") format("woff2"), url("//projektride.co.uk/cdn/fonts/space_mono/spacemono_n4.0c1ebe3659065af9a832b4a469bdd1fdc9521024.woff") format("woff"); } #announcement-bar--sections--26542717862271__announcement-bar .announcement { --font-family: "Space Mono", monospace; --font-style: normal; --font-weight: 400; --adjust-text-size: 1.1; --padding: 10px; --letter-spacing: 0.1em; --line-height: 1.5; --text: #000000; --border: #000000; } #announcement-bar--sections--26542717862271__announcement-bar .flickity-enabled .ticker--animated, #announcement-bar--sections--26542717862271__announcement-bar .announcement__ticker { padding: 0 30px; } @media screen and (max-width: 767px) { #announcement-bar--sections--26542717862271__announcement-bar .announcement { --adjust-text-size: 1.1; } }
Please call ahead to confirm bike hire availability for same-day bookings.
Close
Home
Hire
Bikes
See More
New Bikes
See More
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
Velduro
Yeti
Ridgeback
Brother
Genesis
Singular
Enigma
Frog
Kona
Surly
UTO (ex Eovolt)
Early Rider
Argon 18
Second-Hand Bikes
See More
Ex Display Bikes
Shop All Second-Hand
Custom Builds
See More
Custom Builds for sale
Custom Build Inspiration
Services
See More
Workshop
See More
Workshop Prices
Book a Service
Track Your Service
Other
See More
Custom Builds
Cycle To Work Schemes
HomeInsure Your Bike
/
New products
/
Surly Krampus 29+ FramesetBook a Service
Surly Krampus 29+ Frameset
Parts & Components
See More
Size
Brands
Small
See More
Tent Box
Medium
Cockpit
See More
Frames
Shop by Brand
Handlebars
Gloria
Stems
Trek
Grips & Bar-Tape
Amflow
Headsets
Velduro
BrakesYeti
See More
Ridgeback
Brother
Genesis
Singular
Enigma
Frog
Forks
KonaSee More
Surly
Front Suspension
UTO (ex Eovolt)
Rear Suspension
Early Rider
Finishing Kit
Argon 18
See More
Second-Hand Bikes
Ex Display Bikes
Tyres
Shop All Second-Hand
Tubes
Custom Builds
Custom Builds for saleTubeless
Custom Build Inspiration Saddles
UTO (ex Eovolt)
Seat Posts & Clamps
Early Rider
Pedals
Services Argon 18
Gears & DrivetrainSecond-Hand Bikes
Workshop
See MoreEx Display Bikes
Workshop Prices
Shop All Second-Hand
Book a ServiceComponents
Custom Builds
Track Your ServiceE-bike Batteries and chargers Custom Builds for sale
Other
Custom Build Inspiration
Custom BuildsWheels
See More
Cycle To Work Schemes
Insure Your BikeComplete Wheels
Services
Book a Service
TubelessWorkshop
Workshop Prices
Tools & Maintenance
Parts & Components Book a Service
Clothing and Protection
BrandsSee MoreTrack Your Service
Tent Box Other
CockpitProjektRide MerchandiseCustom Builds
Handlebars
HelmetsCycle To Work Schemes
Stems
GlovesInsure Your Bike
Grips & Bar-Tape Book a Service
Clothing
Headsets
Socks
Brakes
Complete Brakes Parts & Components
Essentials
Brake RotorsSee MoreBrands
Tent Box
Brake Pads
Cleaners, Degreasers and LubricationCockpit
Brake Spares Handlebars
Accessories
Forks
Stems
Front SuspensionMaintenance
Grips & Bar-Tape
Rear Suspension
Finishing Kit Headsets
Sell Your Bike
Tyres Brakes
Contact UsComplete Brakes
Tubes
FinanceBrake Rotors
Tubeless
Brake Pads
SaddlesLog in
Brake Spares
Seat Posts & Clamps
Create accountForks
Pedals Front Suspension
Search
Gears & Drivetrain
Rear Suspension
Components
Finishing Kit
E-bike Batteries and chargers Tyres
Cart
Wheels0 items
Tubes
Complete Wheels
Tubeless Tubeless
Tools & Maintenance
Clothing and Protection
Saddles
ProjektRide MerchandiseSorry, looks like we don't have enough of this product.
Seat Posts & Clamps
Helmets
Pedals
Gloves
Gears & Drivetrain
Clothing Components
Add order notes
Socks E-bike Batteries and chargers
EssentialsSpecial instructions for sellerWheels
Cleaners, Degreasers and Lubrication Complete Wheels
Tubeless
Accessories Tools & Maintenance
Clothing and Protection Your cart is currently empty.
Maintenance ProjektRide Merchandise
.cart-collection__title { --text: #ffffff; }
Helmets
Gloves
Sell Your Bike
ItemsClothing
Free
Contact Us Socks
Essentials
Finance Cleaners, Degreasers and Lubrication
Checkout
FreeAccessories
Open search bar
Maintenance
 
Search for products on our site
Sell Your Bike
Shipping & taxes calculated at checkoutContact Us
Finance
1002mmNorth Macedonia (MKDден)
1017mm