Ocean Blue

    • Spend £50
    • to qualify for free shipping Congratulations! Your order qualifies for free shipping
    • Open navigation menu
    • Open search bar
  • <

    !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 && 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 expiry 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.S
    hedSettings); } 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) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); }) if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) { createRestockRocketScript(window._RestockRocketCon
    led for ${window._RestockRocketConfig.pageType}`); } // Dispatch custom event when app is loaded // Cart selling plan updates will be triggered by stoq:inventory-data-loaded event 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); } }
    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. New Bikes
    We also have a physical store, if you are local please pop in -Shop All New Bikes
    ProjektRide Bike Shop Edinburgh 82 Newington Road, EH91QN, Edinburgh.
    Road / Gravel / Touring BikesHeader Image Quantity:
    1Hybrid / City Bikes
    Electric Bikes
    img src="//projektride.co.uk/cdn/shop/files/logo_header_2048x2048.png?v=1634060673" alt="" class="logo--footer">
    Kids Bikes2Building Your Bike From the BoxShop by Brand
    Insure Your Bike
    Privacy PolicyGloriaDecrease quantity
    Cookie Policy
    TrekRefund policy

    rge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"2025-07-26T09:20:38.472Z","billing_after_n_intervals":7,"billing_after_interval_type":"day","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_selling_plan_id":713071886719,"is_default":true,"type":"full","translations":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","disable_button_until_acknowledged":false,"preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":nul

    dow._RestockRocketConfig.sellingPlans; const maxUpdatedAt = Array.isArray(oldPlans) && oldPlans.length > 0 ? oldPlans.reduce(function(max, plan) { // Parse dates for proper comparison (handles mixed ISO formats) if (plan.updated_at) { const planDate = new Date(plan.updated_at); const maxDate = max ? new Date(max) : null; return (!maxDate || (planDate && !isNaN(planDate) && planDate > maxDate)) ? plan.updated_at : max; } return max; }, '') : null; // Use cached if old array is empty/has no timestamps, or cached is newer // Parse dates for comparison to handle format differences (+00:00 vs .000Z) const cachedDate = new Date(cachedData.cached_at); const maxDate = maxUpdatedAt ? new Date(maxUpdatedAt) : null; const useCached = !maxUpdatedAt || (cachedDate && !isNaN(cachedDate) && (!maxDate || cachedDate > maxDate)); if (us

    t","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_at":"2025-07-26T09:16:04.076Z"}];window._RestockRocketConfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.product = {"id":7941830803682,"title":"BR-M8120\/BL-M8100 XT 4 pot bled brake lever\/post mount calliper I-Spec EV","handle":"br-m8120-bl-m8100-xt-4-pot-bled-brake-lever-post-mount-calliper-i-spec-ev","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cul class=\"description-overview\" data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePowerful fully bled XT 4 pot hydraulic Servo Wave disc brake for more aggressive riding styles\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFully bled lever and calliper comes without adapters or rotors giving you the freedom to customise to suit your bike\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eshort stroke Servo-Wave mechanism f
    u003e\n\u003cli data-mce-fragment=\"1\"\u003ebrake lever featuring reach and free stroke adjustment\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eHinged clamp for quick installation\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eI-spec-EV compatible\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eThe kit also contains sintered pads, plus spare olives and insert should you wish to adjust the length of the cuttable hoses\u003c\/li\u003e\n\u003c\/ul\u003e","published_at":"2022-11-06T17:27:08+00:00","created_at":"2022-11-06T17:27:06+00:00","vendor":"ProjektRide","type":"","tags":["COMPLETE BRAKES","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":19900,"price_min":19900,"price_max":19900,"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":43590980075746,"title":"Left (Rear)","option1":"Left (Rear)","option2":null,"option3":null,"sku":"M8120BLR","requi

    projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-11-06at17.25.31.png?v=1667755629","options":["Option"],"media":[{"alt":null,"id":31106443247842,"position":1,"preview_image":{"aspect_ratio":1.018,"height":1126,"width":1146,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-11-06at17.25.31.png?v=1667755629"},"aspect_ratio":1.018,"height":1126,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-11-06at17.25.31.png?v=1667755629","width":1146}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cul class=\"description-overview\" data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003ePowerful fully bled XT 4 pot hydraulic Servo Wave disc brake for more aggressive riding styles\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eFully bled lever and calliper comes without adapters or rotors giving you the freedom to customise to suit your bike\u003c\/li\u003e\n\u003cli data-mce-fragment=\
    system allows for quick setting up\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003ebrake lever featuring reach and free stroke adjustment\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eHinged clamp for quick installation\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eI-spec-EV compatible\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eThe kit also contains sintered pads, plus spare olives and insert should you wish to adjust the length of the cuttable hoses\u003c\/li\u003e\n\u003c\/ul\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {43590980075746 : "continue",43590980108514 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {43590980075746 : parseInt("1"),43590980108514 : parseInt("1"),}; window._RestockRocketConfig.variantsPreorderCount = {43590980075746 : parseInt(""),43590980108514 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {43590980075746 : null,43590980108514 : null,}; window._RestockRoc
    -465/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) window._RestockRocketConfig.host = 'https://app.restockrocket.io' const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds const LIQUID_CACHE_MAX_AGE = 2 * 60 * 60; // 2 hours in seconds // Calculate Liquid cache freshness once at initialization const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; // Validate timestamp and calculate cache age if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; } else { const now = Math.floor(Date.now() / 1000); // Current time in seconds const liquidCacheAge = now - liquidRenderedAt; // Age in seconds // Handle cli
    <
    <<
    !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
    && 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 expiry 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.ShedSettings); } 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) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); }) if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) { createRestockRocketScript(window._RestockRocketCon

    Shop by Brand

    Gloria
    • img src="//projektride.co.uk/cdn/shop/files/logo_header_2048x2048.png?v=1634060673" alt="" class="logo--footer">
    • More comfortable Selle Royale saddle.
    • Tools & Maintenance Yeti
    • Knog Bell. QUICK LINKS
    About UsRidgeback

    We Give You ExtraClothing and ProtectionContact Us

    Blog

    The UTO Morning OG16 comes with rear pannier rack as standard. Your UTO bike also comes with an anti theft security QR seat post clampProjektRide MerchandiseTrack Service ProgressBrother

    Building Your Bike From the Box

    Specifications Insure Your Bike

    HelmetsPrivacy PolicyGenesis
      Cookie Policy
    • Bike Weight – 16.5kg Terms of Service
    • GlovesRefund policySingular
    • Max Rider Weight - 105kg

    • Wheels img src="//projektride.co.uk/cdn/shop/files/XC_FKTI_Carbon_Fork_SLX_on_magenta_2048x2048.webp?v=1747405873" alt="XC FKTI Bike - Carbon Fork - SLX Groupset" class="mfp-zoom-in-cur" id="65799646675327"> Complete Wheels< img src="//projektride.co.uk/cdn/shop/files/XC_FKTI_Carbon_Fork_SLX_2_magenta_2048x2048.webp?v=1747405880" alt="XC FKTI Bike - Carbon Fork - SLX Groupset" class="mfp-zoom-in-cur" id="65799651459455">
    Tools & Maintenance