• See More 
    Custom Builds for sale
    • heel Size :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003e700c\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eBrake Levers :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eAlhonga AHJ-OD7\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eIntended Use :\u003c < \/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eE-Bike\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eBrakes :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eAlhonga AHJ-OD7\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eCassette Freewheel :\u003c\/strong\u003e\
    • u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003emicroSHIFT CS-H092 11-36 9-Speed\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eChain :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eKMC X9EPT\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eChain Set :\u003c\/strong\u003e\u003c See More\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eAlloy 680 x 20mm 15 degree Backsweep\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eHeadset :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eACROS AZX-585 ZS56\/ZS56\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eHubs :\u003c\/strong\u003e\u003c\/
      \u003c\/span\u003e\u003cspan\u003eSteel 14 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eStem :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eIntegrated Adjustable Ahead\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eTyres :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u <
  • div class="featured-image__bg bg-pos-center-center" style="background-image: url('//projektride.co.uk/cdn/shop/files/2571D9FF-E9AE-4004-9A55-C7FD4DD999D6_2048x.jpg?v=1640941114');">
    Cycle To Work Schemes> /files\/Screenshot2023-06-25at12.09.51.png?v=1687691397","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at12.09.57.png?v=1687691402","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at12.10.06.png?v=1687691410"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at12.09.51.png?v=1687691397","options":["Title"],"media":[{"alt":null,"id":31960281809122,"position":1,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at12.09.51.png?v=1687691397"},"aspect_ratio":1.31,"height":942,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at12.09.51.png?v=1687691397","width":1234},{"alt":null,"id":31960281972962,"position":2,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at12.09.57.png?v=1687691402"},"aspect_ratio":1.31,"height":942,"media_type":"image","src":"\/\/proje u003cstrong\u003eChain Set :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eShimano ET39 38T 170mm\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eCharger :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eDARFON 2AH Smartcharger\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003eSee Morektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at12.09.57.png?v=1687691402","width":1234},{"alt":null,"id":31960282202338,"position":3,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at12.10.06.png?v=1687691410"},"aspect_ratio":1.31,"height":942,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at12.10.06.png?v=1687691410","width":1234}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cdiv class=\"wrap-details read-more\" data-mce-fragment=\"1\"\u003e\n\u003cdiv data-mce-fragment=\"1\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eA lightweight mountain bike hip pack for daily rides and bikepacking on technical terrain.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe Backcountry Hip Pack is a lightweight, comfortable carry choice when you need more space but
    don’t want to wear a backpack. It combines the trail-ready features of the Backcountry Series with our expertise in on-body carry to create the perfect blend of carrying capacity and all-day comfort. Small details like a zipper capable of storing a spare chain link ensure you can carry everything you need for anything you might encounter in the backcountry.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eConstructed from lightweight, breathable mesh and durable, waterproof nylon ripstop, the mountain bike waist pack features a main compartment with internal organisation pockets and two external pockets for easy access on the go. The waist strap features an elasticated velcro closure, enhanced with a secondary security buckle to dial in the on-bike anatomic fit. A high-contrast reflective design enhances visibility in all light conditions.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"wrap-details read-more\" data-mce-fragment=\"1\"\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003e 03eHandlebars :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eAlloy 680 x 20mm 15 degree Backsweep\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eHeadset :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eACROS AZX-585 ZS56\/ZS56\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u00 TECHNICAL\u003ci class=\"tab-arrow\" data-mce-fragment=\"1\"\u003e\u003c\/i\u003e\n\u003c\/h3\u003e\n\u003cdiv data-mce-fragment=\"1\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe Backcountry Hip Pack is made from nylon ripstop; a rugged fabric made to our own exacting specifications for durability and waterproofing. Designed for the demands of off-road riding, this ensures light weight, low stretch, and high abrasion and tear resistance. Notably, the cycling hip pack is seam taped, creating a watertight seal that ensures the hip pack remains completely waterproof.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe velcro strap has an elastic stretch casing and features a Hypalon panel which provides additional support for the security buckle. The fastening system uses Woojin buckles for their reliability and the side straps feature lightweight mesh and padding for comfort. Low profile, quick drying padding on the rear of the bag further improves comfort without adding bulk.\u003c\/p\u003e\n\u003cp d
  • ata-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eCapacity\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e2.5L total pack capacity\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eCare\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eHand wash, using a mild diluted soap if necessary. Afterwards, let it air dry. Do not machine wash, machine dry, or iron.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {44140352438498 : "continue",}; window._RestockRocketConfig.variantsInventoryQuantity = {44140352438498 : parseInt("100"),}; window._RestockRocketConfig.variantsPreorderCount = {44140352438498 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {44140352438498 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {44140352438498 : parseInt(""),}; window._RestockRocketConfig.var trong\u003eMudguard :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eFitted\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003ePedals :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eResin Metro\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eRear Derailleur :\ iantsPreorderMaxCountForMarket = {44140352438498 : null,}; window._RestockRocketConfig.variantsShippingText = {44140352438498 : "",}; window._RestockRocketConfig.variantsShippingTextForMarket = {44140352438498 : null,}; window._RestockRocketConfig.selected_variant_id = 44140352438498; window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019c4de0-280f-760f-b566-2e2f8e837eb8/restock-rocket-shopify-454/assets/restockrocket-product.js' window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019c4de0-280f-760f-b566-2e2f8e837eb8/restock-rocket-shopify-454/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 client clock ahead of server if (liquidCacheAge Sell Your Bike003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eAlloy 30.9x350mm\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eShifters :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003emicroSHIFT Mezzo TS39 9-Speed\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eSpokes :\u0 < 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 03e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eImpac Bigpac 700x50c\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eFrame Shape :\u003c\/strong\u003e\u003c\/div\u003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eOpen Frame\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"card grid-item\"\u003e\n\u003cdiv class=\"card-header pl-0 pr-0\" id=\"specheadingrims\"\u003e\n\u003cdiv class=\"btn btn-link pl-0 pr-0 text-center text-md-left collapsed text-uppercase\" aria-controls=\"specrims\" aria-expanded=\"true\" data-target=\"#specrims\" data-toggle=\"collapse\"\u003e\u003cstrong\u003eGender :\u003c\/strong\u003e\u003c\/diCleaners, Degreasers and Lubrication<
  • = 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; } // Check if translations are enabled but missing from cache // This handles the backfill period where DB has translations but metafield doesn't if (settin 003e\n\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eRidgeback reserves the right to change product specifications without notice. Ridgeback will always ensure that these changes do not detract from the ride experience of the bike.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {45760559055074 : "deny",45760559087842 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {45760559055074 : parseInt("0"),45760559087842 : parseInt("1"),}; window._RestockRocketConfig.variantsPreorderCount = {45760559055074 : parseInt(""),45760559087842 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {45760559055074 : null,45760559087842 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {45760559055074 : parseInt(""),45760559087842 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {45760559055074 : null,45760559087842 : null,}; window._RestockR gs.multi_language_enabled) { if (!settings.translations) { // Translations enabled but no translation data in metafield // Metafield hasn't been backfilled yet - force refresh console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); return null; } // Translations object exists in metafield - cache is valid // If current locale isn't translated, applyTranslations will gracefully use default locale from base fields 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'); } // Don't return null - continue using cache even for untranslated locales } 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 Contact UsockRocketConfig.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 client clock ahead of server if (liquidCacheAge < 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') function applyTranslations(settings) { try { // Skip translation logic entirely if multi-language is not enabled if (!settings || 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 Accessories!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
  • ]; 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; } } // Setup event listener for cart selling plan updates // This must be called before any scripts are loaded to avoid race conditions function setupCartSellingPlanUpdater(settings) { if (!settings || !settings.preorder_enabled) { return; } // Listen for stoq:preorder-api-ready event dispatched by preorder.js window.addEventListener('stoq:preorder-api-ready', function(event) { console.debug('STOQ - Preord = 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; } // Check if translations are enabled but missing from cache // This handles the backfill period where DB has translations but metafield doesn't if (settings.multi_language_enabled) { if (!settings.translations) { // Translations enabled but no er API ready, 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); }); } }); } // 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.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 not ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { // If request failed and we have cached settings (even if expired), use them as fallback if (cachedSettings) { console.debug('STOQ Financet date format in settings'); return null; } const age = Date.now() - updatedAt.getTime(); if (age - using expired cached settings as fallback'); initializeScripts(cachedSettings); } 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._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'index' && (settings.show_button_on_index || settings.preorder_index_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'search' && (settings.show_button_on_search || settings.preorder_search_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_page || settings.preorder_page_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'product') { createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketConfig.script 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') function applyTranslations(settings) { try { // Skip translation logic entirely if multi-language is not enabled if (!settings || MaintenanceUrlCollection); } else { console.debug(`STOQ - no scripts enabled for ${window._RestockRocketConfig.pageType}`); } // Dispatch custom event when app is loaded // Cart selling plan updates will be triggered by stoq:preorder-api-ready 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); } }
  • div class="result__image-img product__media lazyload fade-in" data-bgset="{{ it.product.image.thumb }}" data-aspectratio="{{ it.product.image.aspectRatio }}" data-sizes="auto"> {{@if(it.product.badgeText)}} <span>{{ it.product.badgeText | safe }}
    > > {{/if}} > > <p class="result__title"> <
    a href="{{ it.product.url }}">{{ it.product.title }} > >
    <
      { "@context": "http://schema.org", "@type": "Organization", "name": "ProjektRide","sameAs": [ null, null, null, null, null, null, null ], "url": "https:\/\/projektride.co.uk" }
    • BUY
    • SELL
    • console.log("pr-product-page");
    • RIDE CONFIDENT

    Aeroe Spider Front RackThe secret to the C3 Ceramic Wet Chain Lube is its unique ceramic coating that provides incredible durability and long distance performance on all bicycle chains. The innovative formulation in our chain oil also uses Boron Nitride and Fluoro Polymers to ensure ultra low friction for ultimate drive chain efficiency, high performance and durability. The waterproof qualities of Muc-Off C3 Ceramic Wet Chain Lube also means that your drive chain will excel in the harshest of riding conditions.

    £94.99Looking for long chain oil service intervals and precision gear changes with super low friction reduction? Look no further. C3 Ceramic Wet Lube is packaged in an ergonomic bottle complete with pipette system for easy use and application. It’s also 95% biodegradable and is ideal for Road, Cyclocross and MTB.

       

    Ideal chain lubricant for Road Cycling, Cyclocross & MTB
    SKU: AERARORACKFR Excels in wet, muddy conditions
    Contains Fluoro Polymers & Boron Nitrides for efficiency
    {"id":7639490986210,"title":"Muc-off C3 Ceramic Wet Lube 50ml","handle":"muc-off-c3-ceramic-wet-lube-50ml","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe secret to the C3 Ceramic Wet Chain Lube is its unique ceramic coating that provides incredible durability and long distance performance on all bicycle chains. The innovative formulation in our chain oil also uses Boron Nitride and Fluoro Polymers to ensure ultra low friction for ultimate drive chain efficiency, high performance and durability. The waterproof qualities of Muc-Off C3 Ceramic Wet Chain Lube also means that your drive chain will excel in the harshest of riding conditions.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eLooking for long chain oil service intervals and precision gear changes with super low friction reduction? Look no further. C3 Ceramic Wet Lube is packaged in an ergonomic bottle complete with pipette system for easy use and application. It’s also 95% biodegradable and is ideal for Road, Cyclocross and MTB.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eIdeal chain lubricant for Road Cycling, Cyclocross \u0026amp; MTB\u003c\/li\u003e\n\u003cli\u003eExcels in wet, muddy conditions\u003c\/li\u003e\n\u003cli\u003eContains Fluoro Polymers \u0026amp; Boron Nitrides for efficiency\u003c\/li\u003e\n\u003cli\u003eCreates Ceramic coating for chain protection\u003c\/li\u003e\n\u003cli\u003eUltra long distance performance\u003c\/li\u003e\n\u003cli\u003eIncredible durability\u003c\/li\u003e\n\u003cli\u003ePippette system for accurate, easy application\u003c\/li\u003e\n\u003cli\u003eIncludes UV torch to check for 100% coverage\u003c\/li\u003e\n\u003c\/ul\u003e","published_at":"2022-03-09T19:44:15+00:00","created_at":"2022-03-09T19:44:14+00:00","vendor":"Muc-Off","type":"","tags":["Cleaners Degreasers and Lubrication","muc-off","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":800,"price_min":800,"price_max":800,"available":false,"price_varies":false,"compare_at_price":1150,"compare_at_price_min":1150,"compare_at_price_max":1150,"compare_at_price_varies":false,"variants":[{"id":42577956503778,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"PREA02032022.1882","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Muc-off C3 Ceramic Wet Lube 50ml","public_title":null,"options":["Default Title"],"price":800,"weight":0,"compare_at_price":1150,"inventory_management":"shopify","barcode":"5037835869002","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-03-09at19.39.45.png?v=1646855110"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-03-09at19.39.45.png?v=1646855110","options":["Title"],"media":[{"alt":null,"id":29418365714658,"position":1,"preview_image":{"aspect_ratio":0.939,"height":890,"width":836,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-03-09at19.39.45.png?v=1646855110"},"aspect_ratio":0.939,"height":890,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-03-09at19.39.45.png?v=1646855110","width":836}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe secret to the C3 Ceramic Wet Chain Lube is its unique ceramic coating that provides incredible durability and long distance performance on all bicycle chains. The innovative formulation in our chain oil also uses Boron Nitride and Fluoro Polymers to ensure ultra low friction for ultimate drive chain efficiency, high performance and durability . The waterproof qualities of Muc-Off C3 Ceramic Wet Chain Lube also means that your drive chain will excel in the harshest of riding conditions.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eLooking for long chain oil service intervals and precision gear changes with super low friction reduction? Look no further. C3 Ceramic Wet Lube is packaged in an ergonomic bottle complete with pipette system for easy use and application. It’s also 95% biodegradable and is ideal for Road, Cyclocross and MTB.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eIdeal chain lubricant for Road Cycling, Cyclocross \u0026amp; MTB\u003c\/li\u003e\n\u003cli\u003eExcels in wet, muddy conditions\u003c\/li\u003e\n\u003cli\u003eContains Fluoro Polymers \u0026amp; Boron Nitrides for efficiency\u003c\/li\u003e\n\u003cli\u003eCreates Ceramic coating for chain protection\u003c\/li\u003e\n\u003cli\u003eUltra long distance performance\u003c\/li\u003e\n\u003cli\u003eIncredible durability\u003c\/li\u003e\n\u003cli\u003ePippette system for
    <a class="product__media product__media--featured" href="/collections/essentials/products/hire-smith-convoy-helmet" title="Hire Lazer Compact Helmet" aria-label="Hire Lazer Compact Helmet" style="background-image: url(//projektride.co.uk/cdn/shop/files/my2023_tempo-kineticore-black_right_1400x1011800x600-removebg-preview_1_600x.png?v=1747484784)"> <
    £0.00
    Black

    Product Details

    The bike rack mountain bike and E-mountain bike users love the most, the Spider Front Rack was designed off our award winning Spider platform. Carrying more gear, or matching Panniers front and back has never been easier, you'll love the light weight, robust build and ease of use that the Spider is renowned for. The newest addition to our Spider series, this rack is the base layer of your aeroe system up frontHire Ortlieb 40L Pannier Bags

     

      < a class="product__media product__media--featured" href="/collections/essentials/products/hire-ortlieb-40l-pannier-bags" title="Hire Ortlieb 40L Pannier Bags" aria-label="Hire Ortlieb 40L Pannier Bags" s
    • tyle="background-image: url(//projektride.co.uk/cdn/shop/files/resize_width_1000_600x.jpg?v=1741085512)"> Make any eMTB or MTB bike commute or adventure-ready<
    • span class="visually-hidden">Hire Ortlieb 40L Pannier Bags > Mix n match your perfect combination - compatible with all aeroe accessories and mounts
    • The spider pannier receiver, Spider Cradle and Quick Mount Pod are sold separately as a rack accessory and is fully compatible with the spider front rackLife Systems Pocket First Aid Kit - HIRE
    • < a class="product__media product__media--featured" href="/collections/essentials/products/life-systems-pocket-first-aid-kit-hire" title="Life Systems Pocket First Aid Kit - HIRE" aria-label="Life Systems Pocket First Aid Kit - HIRE" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.22_5c0e6e2d-1913-4fd1-a90d-b486895960b6_600x.png?v=1691610357)">
      Life Systems Pocket First Aid Kit - HIRE
    • Colour
      < div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.32_9d81277b-124e-4fdc-8a0f-fbfb40a9343d_600x.png?v=1691610357)">
    • SizeLife Systems Pocket First Aid Kit - HIRE
      One size£0.00
    Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable
    >
    Tel

    FAQ0131 374 5324

    Questions and answers

    Location
    • Edinburgh
    Website by
    Juan Borges Designs
    .