Andorra (EUR€)
Header Image
Angola (GBP£)
Ascension Island (SHP£)
  • Austria (EUR€)
  • Belarus (GBP£)

hopify","barcode":"197216230328","featured_media":{"alt":"Domane SL 5 Gen 4","id":72254268735871,"position":11,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-C-Primary_d7c2f76d-fbda-4169-8035-dcfd24ecf4b6.jpg?v=1787065227"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Primary_64125ba7-f11b-45d5-a7bb-9d6af33ac2ac.jpg?v=1787065226","\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Portrait_850fb456-2413-48bb-96c6-43ca10f515a1.jpg?v=1787065227","\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Alt1.jpg?v=1787065227","\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Alt3.jpg?v=1787065228","\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Alt4.jpg?v=1787065227","\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-D-Primary_8abb76c8-
rimary_64125ba7-f11b-45d5-a7bb-9d6af33ac2ac.jpg?v=1787065226","options":["Colour","Size"],"media":[{"alt":"Domane SL 5 Gen 4","id":72254268408191,"position":1,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Primary_64125ba7-f11b-45d5-a7bb-9d6af33ac2ac.jpg?v=1787065226"},"aspect_ratio":1.333,"height":2250,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Primary_64125ba7-f11b-45d5-a7bb-9d6af33ac2ac.jpg?v=1787065226","width":3000},{"alt":"Domane SL 5 Gen 4","id":72254268440959,"position":2,"preview_image":{"aspect_ratio":1.499,"height":2668,"width":4000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Portrait_850fb456-2413-48bb-96c6-43ca10f515a1.jpg?v=1787065227"},"aspect_ratio":1.499,"height":2668,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Portrait_850fb456-2413-48bb-96c6-43ca10f515a1.jpg?v=1787065227","width":4000},{"a
image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-A-Alt4.jpg?v=1787065227","width":4000},{"alt":"Domane SL 5 Gen 4","id":72254268572031,"position":6,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-D-Primary_8abb76c8-9e9b-408b-89eb-34ce0228fee6.jpg?v=1787065227"},"aspect_ratio":1.333,"height":2250,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-D-Primary_8abb76c8-9e9b-408b-89eb-34ce0228fee6.jpg?v=1787065227","width":3000},{"alt":"Domane SL 5 Gen 4","id":72254268604799,"position":7,"preview_image":{"aspect_ratio":1.499,"height":2668,"width":4000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-D-Portrait_720d83a8-7dce-4752-ab32-88115ebc81e8.jpg?v=1787065227"},"aspect_ratio":1.499,"height":2668,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-D-Portrait_720d83a8-7dce-4752-ab32-88115ebc81e8.jpg?v=1787065227","wi

District+ 3 Lowstep Belt is a comfortable, dependable electric bike that makes getting around your city simple, fast and fun. It has low-maintenance internal gearing, a Bosch motor and controller, and a frame that integrates the batteries inside the down tube, and comes with battery options from 400 Wh to 800 Wh. Plus, it comes with road-smoothing suspension and all the utility features you need like mudguards, integrated lights and a rear rack, plus a low-maintenance belt drive.,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-D-Alt4.jpg?v=1787065227","width":4000},{"alt":"Domane SL 5 Gen 4","id":72254268735871,"position":11,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-C-Primary_d7c2f76d-fbda-4169-8035-dcfd24ecf4b6.jpg?v=1787065227"},"aspect_ratio":1.333,"height":2250,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-C-Primary_d7c2f76d-fbda-4169-8035-dcfd24ecf4b6.jpg?v=1787065227","width":3000},{"alt":"Domane SL 5 Gen 4","id":72254268768639,"position":12,"preview_image":{"aspect_ratio":1.499,"height":2668,"width":4000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-C-Portrait_8da86876-901d-4aa0-98c3-ee69d875e2cd.jpg?v=1787065227"},"aspect_ratio":1.499,"height":2668,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-C-Portrait_8da86876-901d-4aa0-98c3-ee69d875e2cd.jpg?Tristan da Cunha (GBP£)

1.333,"height":3000,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DomaneSL5-26-57629-C-Alt4.jpg?v=1787065227","width":4000}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003eThe Domane SL 5 is an endurance road bike ready to comfortably take on rough roads and long miles in comfort. It's crafted with a lightweight 500 Series OCLV Carbon frame speced with a reliable Shimano 105 drivetrain, and aluminium wheels and aluminium handlebars to balance performance and price.\u003c\/p\u003e\n\u003ch3\u003eTechnology\u003c\/h3\u003e\u003cp\u003eThe smooth advantage - Newly refined IsoSpeed soaks up fatiguing bumps and saves weight so you can ride stronger for longer.\u003c\/p\u003e\n\u003ch3\u003eSpecification\u003c\/h3\u003e\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eFrame\u003c\/th\u003e\n\u003ctd\u003e500 Series OCLV Carbon, IsoSpeed, internal storage, tapered head tube, internal cable routing, 3S chain keeper, mudguard mounts, flat mount disc, 142x12 mm thru

Technology\n\u003ctd\u003eBontrager alloy, sealed bearing, CenterLock disc, Shimano 11-speed freehub, 142x12 mm thru axle\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRims\u003c\/th\u003e\n\u003ctd\u003eBontrager Paradigm 23, Tubeless Ready, 24-hole, 23 mm width, Presta valve\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eShifter\u003c\/th\u003e\n\u003ctd\u003eShimano\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDerailleur Front\u003c\/th\u003e\n\u003ctd\u003eShimano 105 R7100, braze-on, down swing\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDerailleur Rear\u003c\/th\u003e\n\u003ctd\u003eShimano 105 R7100, 36T max cog\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCrank\u003c\/th\u003e\n\u003ctd\u003eShimano 105 R7100, 50\/34, 165 mm length\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBottom Bracket\u003c\/th\u003e\n\u003ctd\u003ePraxis, T47 threaded, internal bearing\u003c\/td\u003e\n\u003c\/tr\u003e\n\

A better way to produce aluminium - Starting in 2024, we began removing high-emission aluminium from our manufacturing and replacing it with low-emission aluminium made with renewable energy. By October 2025, nearly every alloy bike we make – this one included – had made the switch, driving a major drop in our footprint.tr\u003e\n\u003cth\u003eStem\u003c\/th\u003e\n\u003ctd\u003eTrek RCS Pro, -7-degree, 70 mm length\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSize Chart Rider Height\u003c\/th\u003e\n\u003ctd\u003eRider Height - 152.0 - 158.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSize Chart Rider Inseam\u003c\/th\u003e\n\u003ctd\u003eInseam - 71.0 - 75.0\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e"};window._RestockRocketConfig.variantsInventoryPolicy = {58205433495935 : "deny",58205433528703 : "deny",58205433561471 : "deny",58205433594239 : "deny",58205433627007 : "deny",58205433659775 : "deny",58205433692543 : "deny",58205433725311 : "deny",58205433758079 : "deny",58205433790847 : "deny",58205433823615 : "deny",58205433856383 : "deny",58205433889151 : "deny",58205433921919 : "deny",58205433954687 : "deny",58205433987455 : "deny",58205434020223 : "deny",58205434052991 : "deny",58205434085759 : "deny",58205434118527 : "deny",58205434151295 : "deny",58205434184063 : "de

33659775 : parseInt(""),58205433692543 : parseInt(""),58205433725311 : parseInt(""),58205433758079 : parseInt(""),58205433790847 : parseInt(""),58205433823615 : parseInt(""),58205433856383 : parseInt(""),58205433889151 : parseInt(""),58205433921919 : parseInt(""),58205433954687 : parseInt(""),58205433987455 : parseInt(""),58205434020223 : parseInt(""),58205434052991 : parseInt(""),58205434085759 : parseInt(""),58205434118527 : parseInt(""),58205434151295 : parseInt(""),58205434184063 : parseInt(""),58205434216831 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {58205433495935 : null,58205433528703 : null,58205433561471 : null,58205433594239 : null,58205433627007 : null,58205433659775 : null,58205433692543 : null,58205433725311 : null,58205433758079 : null,58205433790847 : null,58205433823615 : null,58205433856383 : null,58205433889151 : null,58205433921919 : null,58205433954687 : null,58205433987455 : null,58205434020223 : null,58205434052991 : null,58205434085759 : null,582Tunisia (GBP£)

Specification5433659775 : null,58205433692543 : null,58205433725311 : null,58205433758079 : null,58205433790847 : null,58205433823615 : null,58205433856383 : null,58205433889151 : null,58205433921919 : null,58205433954687 : null,58205433987455 : null,58205434020223 : null,58205434052991 : null,58205434085759 : null,58205434118527 : null,58205434151295 : null,58205434184063 : null,58205434216831 : null,}; window._RestockRocketConfig.variantsShippingText = {58205433495935 : "",58205433528703 : "",58205433561471 : "",58205433594239 : "",58205433627007 : "",58205433659775 : "",58205433692543 : "",58205433725311 : "",58205433758079 : "",58205433790847 : "",58205433823615 : "",58205433856383 : "",58205433889151 : "",58205433921919 : "",58205433954687 : "",58205433987455 : "",58205434020223 : "",58205434052991 : "",58205434085759 : "",58205434118527 : "",58205434151295 : "",58205434184063 : "",58205434216831 : "",}; window._RestockRocketConfig.variantsShippingTextForMarket = {58205433495935 : null,58205433528703 : null,5

VariantIds.preorder_variant_ids) || []).length; _sqCfg.preordersConfigured = !!(_sqPlanEnabled && _sqPreCount); } catch (e) { } try { var _sqc = window._RestockRocketConfig; var _sqOn = !!(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout); var _sqPre = (_sqc.cachedPreorderVariantIds && _sqc.cachedPreorderVariantIds.preorder_variant_ids) || []; var _sqArm = false; if (_sqOn && _sqc.preordersConfigured) { if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) { _sqArm = _sqc.product.variants.some(function (v) { return _sqPre.indexOf(Number(v.id)) !== -1; }); } 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.documentEleme RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) window._RestockRocketConfig.host = (window._RestockRocketConfig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io' 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) 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 || ''; Uganda (UGXUSh) 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
Frame < Premium Alpha Platinum Aluminium frame, top-load PowerPack, integrated cockpit routing, 135x5 mm QR& !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
Frame Material } 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
Shimano MT200 hydraulic disc // Shimano MT200 hydraulic disc Shimano MT200 hydraulic disc // Shimano MT200 hydraulic disc
Brake Rotor Shimano EM300, CenterLock, 160 mm // Shimano RT10, CenterLock, 160 mm
Pedals slip-proof pedals with reflectors
Saddle Selle Royal Nuvola
Seatpost Alloy, suspension, 31.6 mm, 300 mm length
Handlebar Alloy, 31.8 mm clamp, 25 mm rise, 630 mm width
Stem Bontrager alloy, 31.8 mm clamp, adjustable rise, Blendr-compatible, 105 mm length
Grips Herrmans Clik, ergonomic, lock-on // Herrmans Clik, ergonomic, lock-on
Fenders SKS plastic, rear // SKS plastic, frontClose
Carrier Rear Alloy rear rack, 25 kg max weight
Kickstand Pletscher Comp Flex 18
Controller Bosch Purion 200

  • 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 & & !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

    nitConfig.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.href, page_type: _stoqInitConfig.pageType || '', 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 || '', 01313745324 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 _sqForVariant = function (pl) { return pl && pl.enabled && 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 && _sqTra) or email (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) || 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), gate_armed: !!_sqTrack.acceleratedGateArmed, gate_active_at_click: !!(document.documentElement && document.documentElement.classList.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; } })(), }, }); [email protected] } 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') where on of the team will be more than happy to help.); } else { console.debug('STOQ - 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.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(', ')); } const value = body && body.data && body.data.shop && body.data.shop.metafield && body.data.shop.metafield.value; if (!value) { throw new Error('Storefront API returned no settings metafield value'); } cfg.storefrontSettings = JSON.parse(value); console.debug('STOQ - stored live settings from Storefront API on config.storefrontSettings'); }) .catch(function(e) { console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message); }); } if (typeof window.requestIdleCallback === 'function') { window.requestIdleCallback(run, { timeout: 5000 }); } else { setTimeout(run, 0); } })(); conProjektRide Bike Shop Edinburghst 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 (!resp

    onse.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { 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 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}:`, 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_i
    ds || []; } }), fetchEmbedConfig('integrations', function(data) { if (Array.isArray(data)) { window._RestockRocketConfig.integrations = data; } }) ]), 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) && window._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 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)
  • If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.

    Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.

    We also have a physical store, if you are local please pop in -

    ProjektRide Bike Shop Edinburgh

    82 Newington Road, EH91QN, Edinburgh.