Mali (XOFFr)
Socks
Essentials
Nigeria (NGN₦)
Suggested search terms
Guinea-Bissau (XOFFr)
Blog
Tools & Maintenance
Yeti
South Sudan (GBP£)
Brother
Singular
Sudan (GBP£)
Mozambique (GBP£)
Second-Hand Bikes
Ex Display Bikes
Shop All Second-Hand
Guernsey (GBP£)
Niger (XOFFr)
See More
Norway (GBP£)
Iceland (ISKkr)Poland (PLNzł)
Services
Track Your ServiceRefund policy
San Marino (EUR€)
Kosovo (EUR€)
Liechtenstein (CHFCHF)
Sweden (SEKkr)
Switzerland (CHFCHF)
Privacy Policy
Monaco (EUR€)
Brakes
Montenegro (EUR€)
Shop All New BikesSan Marino (EUR€)
Shop All
Road / Gravel / Touring Bikes
Gears & Drivetrain
São Tomé & Príncipe (STDDb)
Senegal (XOFFr)
Mountain Bikes
Components
Terms of Service
Pedals
- Togo (XOFFr) Complete Brakes Refund policyMorocco (MADد.م.) Brake Rotors
- Tristan da Cunha (GBP£) Mozambique (GBP£) Brake Pads Tunisia (GBP£)
- Brake SparesOpen cartNamibia (GBP£) Türkiye (GBP£) Forks Netherlands (EUR€)
- See More Uganda (UGXUSh) { "@context": "http://schema.org", "@type": "Organization", "name": "ProjektRide","logo": "https:\/\/projektride.co.uk\/cdn\/shop\/files\/logo-svg-white_1592x.svg?v=1676480383","sameAs": [ null, null, null, null, null, null, null ], "url": "https:\/\/projektride.co.uk" } Niger (XOFFr)
- Front Suspension Ukraine (UAH₴) Nigeria (NGN₦) Rear SuspensionClose
- United Kingdom (GBP£) North Macedonia (MKDден) United States (GBP£)
- Finishing Kit Norway (GBP£) See MoreHome Vatican City (EUR€) Poland (PLNzł)
- Hire Tyres Western Sahara (MADد.م.) BikesPortugal (EUR€) Tubes
- See More Zambia (GBP£) Tubeless Réunion (EUR€)
- Zimbabwe (USD$) Saddles Romania (RONLei) Seat Posts & ClampsNew Bikes
#productTemplate--template--26482384994687__main {
--PT: 60px;
--PB: 30px;
}
Spain (EUR€)
Clothing and Protection
See More
St. Helena (SHP£)
St. Helena (SHP£)
Genesis
ProjektRide Merchandise
| Helmets | EnigmaSvalbard & Jan Mayen (GBP£) | Gloves
|---|---|
| Clothing Sweden (SEKkr) | KonaSocks |
| UTO (ex Eovolt) | Tanzania (TZSSh) |
| See More Togo (XOFFr) | Argon 18|
| Accessories | Second-Hand Bikes Tunisia (GBP£) |
| Türkiye (GBP£) | Ex Display Bikes |
| Contact Us | Ukraine (UAH₴) | Custom Builds
| United Kingdom (GBP£) | Custom Builds for sale |
| Custom Build Inspiration | Vatican City (EUR€) | Log in
| Services Western Sahara (MADد.م.) | Create accountSee More |
| Home | WorkshopSearch/New productsZimbabwe (USD$) | See More /
| < | <& !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 | 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
| _sqTrack.cachedPreorderVariantIds.preorder_variant_ids) || (_sqTrack.inlinePreorderIdsDropped === true && (_sqTrack.variantsInventoryPolicy || {})[vid] === 'continue' && (_sqTrack.variantsInventoryQuantity || {})[vid] | = 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.cdelete 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( | 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
| tegrations', 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 | 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 preorderCollectectionScriptUrl); } 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 | 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); } }
- Comoros (KMFFr)



Germany (EUR€)
See More
Guadeloupe (EUR€)
Netherlands (EUR€)