Open navigation menu
  • Road / Gravel / Touring Bikes<-
  • Custom Builds£ Custom Builds for sale Custom Build Inspiration
  • ProjektRide
  • Buy Sell Ride Confident Questions and answers
  • Open search bar

  • Medium
  • <
  • Boardman Comp X7 - Small Genesis
    <
    <
    Workshop PricesMax McMullon
    Friendly welcome, quick to help, reliable comms. Glad to have a local bike shop in Edinburgh who know what they're doing!
    Nicholas Paul Franks
    I always get really friendly and helpful advice at ProjektRide and excellent results from any servicing they do. Highly recommended.

    Christine Thompson

    Brilliant service. Andy listened to exactly what I needed and very kindly brought both bikes to my house for me to test ride, so helpful. Would definitely recommend.

    Jill Kerr

    ★★★★★
    div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/IMG_50792_600x.jpg?v=1761905706)">
    >

    Pinnacle Dolomite Road Bike - Medium
    £400.00

    • If you are looking for someone helpful and knowledgeable this is the place to go.
    • Excellent service got a great bike in great condition even helped out with a few extras and provided the original receipt for lifetime guarantee on the frame.
    • Iain OrrTubeless
    • Saddles
    • ★★★★★
    • I dropped my Specialized Vita for new brake pads and a service, the bike was ready for collection the same day and the price was reasonable! Bicycle feels brand new again and works amazing! Many thanks!!
    • Heather PatersonSeat Posts & Clamps
    Pedals
    ★★★★★
    Staff are very kind and the price is relatively reasonable, also student can have 10% discount which it great :)
    William Gui ★★★★★ Excellent friendly and efficient service. Great product knowledge and good value for money! Highly recommenda class="product__media product__media--featured" href="/collections/second-hand-bikes/products/projektrides-student-bike-bundle-1" title="Projektride's Student bike bundle!" aria-label="Projektride's Student bike bundle!" style="background-image: url(//projektride.co.uk/cdn/shop/files/B1B0CF04-02C0-4099-B685-92962FC479F2_600x.jpg?v=1758108217)"> Ben Ross

    span class="visually-hidden">Projektride's Student bike bundle!

    >
    >
      Use this testimonial as an opportunity for your customers to discuss your brand and what sets you apart from the competition.
    • John Doe
    • 5+div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/C685060D-D458-4A74-86F3-7C3E83F9F362_600x.jpg?v=1758108217)">
    • >
    • Decrease quantityProjektride's Student bike bundle!HAVE A QUESTION?
    • We love chatting about your next bike adventure. Get in touch and we can go through the perfect bike along with any accessories needed to get you to your final destination. If you are local to our branch in Edinburgh, please pop in for a coffee and feel free to test ride the bikes in stock.
    • £499.00If you are looking to sell your bike, please click
    • here
    • Increase quantity to get the ball rolling.
    • GET IN TOUCH
    • Specialized Rockhopper Hardtail Mountain Bike - Small
    <> <

    • £300.00<
    • Specialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second Hand
    • a class="product__media product__media--featured" href="/collections/second-hand-bikes/products/specialized-turbo-levo-alloy-oasis-black-size-s3-medium" title="Specialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second Hand" aria-label="Specialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second Hand" style="background-image: url(//projektride.co.uk/cdn/shop/files/DSC02285_600x.jpg?v=1764873083)">
    • span class="visually-hidden">Specialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second Hand
    • >
    • >
    • div class="product__media-hover-img product__media" style="background-ima
    <<
    • Tubeless sealant replaced and inflated to the correct levels Logo image<
    • a class="product__media product__media--featured" href="/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)"> Yeti ASR T series full suspension XC bike - AXS T Type - Rockshox - EX DEMO <
    • span class="visually-hidden">Hire Lazer Compact HelmetSuspension stanchions cleaned and seals lubricated Sell Your Bike <> £4,250.00 a href="https://www.straightcutdesign.com/" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot_2022-03-16_at_14.44.40_360x.png?v=1647443209); width: 170px; padding-top: 26.3%;">

    a class="product__media product__media--featured" href="/products/hire-ortlieb-40l-pannier-bags" title="Hire Ortlieb 40L Pannier Bags" aria-label="Hire Ortlieb 40L Pannier Bags" style="background-image: url(//projektride.co.uk/cdn/shop/files/resize_width_1000_600x.jpg?v=1741085512)"> > QUICK LINKSOpen cart<> About Us a href="https://projektride.co.uk/search?type=product&q=benno" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot_2023-08-30_at_13.34.25_360x.png?v=1693401784); width: 120px; padding-top: 102.4%;"> < > Servicing//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.22_5c0e6e2d-1913-4fd1-a90d-b486895960b6_600x.png?v=1691610357)"> Open search bar Workshop PricesLogo imagespan class="visually-hidden">Life Systems Pocket First Aid Kit - HIRE Delivery & Returns > > INFORMATION > .site-footer { --bg: #1f2324; --text: #ffffff; --text-alpha-15: rgba(255, 255, 255, 0.15); --text-alpha-60: rgba(255, 255, 255, 0.6); --text-alpha-85: rgba(255, 255, 255, 0.85); } .footer-content__logo__image { width: 170px; } Working Hours Mon - Fri: 09:00 - 18:30 Sun: Closed img src="//projektride.co.uk/cdn/shop/files/logo_header_2048x2048.png?v=1634060673" alt="" class="logo--footer"> Tel About UsSearch text field 0131 374 5324 Contact Us a class="product__media product__media--featured" href="/products/kryptolok-standard-u-lock-with-4-foot-kryptoflex-cable-hire" title="Hire Kryptolok Standard U-LocBlog Terms of Service View allSERVICES Loading more. < div class="result__image" data-aspectratio="{{ it.product.image.aspectRatio }}" data-product-image> 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)}} FAQQuestions and answers <I'm looking to find out more information about a product, where can I find this?) or email ([email protected]) where on of the team will be more than happy to help.]; 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; } } // First try to get settings from metafields with expiry check const cachedSettings = window._RestockRocketCon createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { console.debug(`STOQ - no scripts enabled for ${window._RestockRocketConfig.pageType}`); } // Check and update cart selling plans after scripts are loaded if (settings.preorder_enabled) { updateCartSellingPlans(); } // Dispatch custom event when app is loaded const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabled: settings.enable_app, settings: settings } }); console.debug('STOQ - dispatching app loaded event'); window.dispatchEvent(appLoadedEvent); } } function updateCartSellingPlans() { // Wait for the API to be available with retries const maxRetries = 10; const retryDelay = 500; functioolor:#000}.restock-rocket-toast .dismiss{margin-left:15px;z-index:1;font-size:20px;}.restock-rocket-toast-top{top:60px}.restock-rocket-toast-bottom{bottom:75px}.restock-rocket-toast-left,.restock-rocket-toast-right{-webkit-animation:.5s forwards slide;animation:.5s forwards slide}.restock-rocket-toast-left{left:0;transform:translateX(-100%);-webkit-transform:translateX(-100%);border-radius:0 10px 10px 0}.restock-rocket-toast-left.slide-out{-webkit-animation:.5s forwards slide-out-left;animation:.5s forwards slide-out-left}.restock-rocket-toast-right{right:0;transform:translateX(100%);-webkit-transform:translateX(100%);border-radius:10px 0 0 10px}.restock-rocket-toast-right.slide-out{-webkit-animation:.5s forwards slide-out-right;animation:.5s forwards slide-out-right}@keyframes slide{100%{transform:translateX(0)}}@-webkit-keyframes slide{100%{-webkit-transform:translateX(0)}}@keyframes slide-out-left{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}@-webkit-keyframes slide-out-left{0%{-webkit-tranSELL © 2025, img src="//projektride.co.uk/cdn/shop/products/IMG_1979_98x.heic?v=1664459005" alt="" class="product-single__thumbnail-img"> . Website by . < img src="//projektride.co.uk/cdn/shop/products/IMG_1980_98x.heic?v=1664459005" alt="" class="product-single__thumbnail-img"> _any_variant_out_of_stock_collection":false,"show_button_on_index":false,"insert_button_after_selector_collection":null,"insert_button_after_selector_index":null,"push_enabled":false,"push_allowed":false,"storefront_form_push_label":"Push","storefront_form_push_description":"Click 'Allow' to be notified via push notification","storefront_form_push_error":"Permission rejected! Please review notification settings and try again","storefront_font_family":"OpenSans","insert_button_after_selector_collection_type":"afterend","show_channel_selector":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send notification to your browser","insert_button_after_selector_page":null,"show_button_on_page":false,"insert_button_after_selector_search":null,"show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":"","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_lin sert_selector_type":"afterend","preorder_original_price_selector":"","preorder_price_format":"{{amount}} {{currency}}","show_badge_if_any_variant_is_preorder":false,"enable_console_debug":false,"inline_form_enabled":false,"inline_form_selector":null,"inline_form_selector_type":"afterend","storefront_form_prefill_customer":true,"market_setup_type":"single_market","shopify_app_id":5940125,"cache":true,"cached_at":"2025-11-11T14:27:02.333Z","multi_language_enabled":false,"translation_locale":"en"};window._RestockRocketConfig.cachedPreorderVariantIds = {"preorder_variant_ids":[42167799447778,43590980075746,43916521013474,43934694998242,43934695031010,43934695620834,43935975440610,43935975473378,43935989399778,43935989432546,43935990284514,43935994118370,43935995625698,43935995855074,43936000835810,43936003195106,43936003227874,43936008012002,43936008044770,43936022757602,43936022790370,43936022823138,43936022855906,43936056115426,43936061030626,43936064930018,43936070631650,43936078037218,43936078069986,4393608812,43981345685730,43981357580514,43981357613282,43981362462946,43981362495714,43981362528482,43981369016546,43981369049314,43981374914786,43981374947554,43981374980322,43981392904418,43981695844578,43981695877346,43981695910114,43981695942882,43981986070754,43981987905762,43981987938530,44052906967266,44052907327714,44052907360482,44052907393250,44052907426018,44052907458786,44052907491554,44052909097186,44052909129954,44140302827746,44140302893282,44140317016290,44155590508770,44155590541538,44155594211554,44155594244322,44155594277090,44155594309858,44155594342626,44155594375394,44155594440930,44155594473698,44155594506466,44195991847138,44195991945442,44329993437410,44329993470178,44329993502946,44329993535714,44329993568482,44957136584930,44957136781538,44957136945378,45068753961186,45068753993954,45069622640866,45069622903010,45069622968546,45069750730978,45069750763746,45353010921698,45353010954466,45353010987234,45353018261730,45353018294498,45353018327266,55569712382335,55569712447871,55569712480639,5500000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_charge_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_preorde prior to activity to increase blood sugar levels, followed by 1-2 packets per hour during activity. Consumption of CLIF BLOKS should always be followed with a mouthful of water. 3 bloks provide roughly the same energy as a traditional gel.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eFull Nutritional Info\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/2192\/9727\/files\/Clif_Blok_Nutrition_info_480x480.png?v=1584794492\" alt=\"\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/2192\/9727\/files\/Clif_Blok_Nutrition_info_480x480.png?v=1584794492\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e","published_at":"2022-06-16T16:29:22+01:00","created_at":"2022-06-16T16:28:59+01:00","vendor":"ProjektRide","type":"","tags":["Bike Packing","rider care","spo- our during activity. Consumption of CLIF BLOKS should always be followed with a mouthful of water. 3 bloks provide roughly the same energy as a traditional gel.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eFull Nutritional Info\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/2192\/9727\/files\/Clif_Blok_Nutrition_info_480x480.png?v=1584794492\" alt=\"\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/2192\/9727\/files\/Clif_Blok_Nutrition_info_480x480.png?v=1584794492\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {43000663933154 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {43000663933154 : parseInt("93"),}; window._RestockRocketConfig.variantsPreorderCountextensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/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 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 tr
    Pricea href="https://projektride.co.uk/products/vecnum-freequence-suspension-stem-1?_pos=1&_sid=18e478687&_ss=r" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/IMG_0247_360x.png?v=1693300758); width: 120px; padding-top: 100.0%;"> <span class="visually-hidden">Hire Ortlieb 40L Pannier BagsService DescriptionLogo image
    Intermediate serviceCycle to Work > £108 a href="https://projektride.co.uk/search?q=ESI&type=product" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot_2023-10-05_at_10.46.34_360x.png?v=1696499201); width: 120px; padding-top: 67.7%;"> 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)">
    Life Systems Pocket First Aid Kit - HIRE Sat: 9:00 - 16:00 £0.00 QUICK LINKSHire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable
    MTB Advanced Level Service £250 LocationPrivacy Policy Cookie Policy Refund policy
    ..
    li class="result"> a href="{{ it.product.url }}" class="result__image-link" aria-label='{{ it.product.title }}'> <
    < 01313745324<
    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 - 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}`); if(settings.enable_app) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.<ocket-acknowledgement-checkbox{margin-bottom:12px;display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height: 1.5;}.restock-rocket-acknowledge-checkbox-input{width:18px;height:18px;margin-top:2px;cursor:pointer;flex-shrink:0;accent-color: #0d0d0d;}.restock-rocket-acknowledge-checkbox-label{flex:1;cursor:pointer;}.restock-rocket-preorder-countdown-timer{display:flex;flex-direction:column;align-items:center;padding:16px;margin:8px 0;font-family:inherit;}.restock-rocket-preorder-countdown-timer .countdown-header{font-size:16px;margin-bottom:6px;text-align:center}.restock-rocket-preorder-countdown-timer .countdown-units{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}.restock-rocket-preorder-countdown-timer .countdown-unit{display:flex;flex-direction:column;align-items:center;gap:6px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:40px;padding:10px 6px;text-align:center;font-size:20px;line-height:1}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:14px;f
    0 img src="//projektride.co.uk/cdn/shop/products/IMG_1986_2048x2048.heic?v=1664459002" alt="Custom Build Surly Disc Trucker" class="mfp-zoom-in-cur" id="30837269823714">
    Mahle Electrical diagnostic, updates and warranty ProjektRide From £40 Bottom bracket chase and FaceJuan Borges Designs From £50
    sms_default_channel":true,"optin_required":false,"optin_success_text":"Registration confirmed! You'll receive an alert when the product is restocked.","storefront_button_border_radius":0,"storefront_button_disable_tag_hides_button":true,"storefront_button_disable_tag_enabled":false,"quantity_required":false,"storefront_form_quantity_label":"Quantity","enable_alerts":true,"sms_allowed":false,"email_allowed":true,"collect_promotion_consent_default":true,"insert_button_after_selector":null,"insert_button_after_selector_type":"afterend","storefront_button_position_type":"float-right","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"This item needs to be purchased separately. Please check out or clear your cart before adding this item.","storefront_error_heading":"Error","default_locale":"en","collection_page_button_text_color":"#FFFFFF","collection_page_button_background_color":"#202223","show_button_if_any_out_of_stock":false,"show_button_ifupdated_at":"2025-12-13T22:26:10Z","shopify_market_id":382140642,"market_locations_enabled":false}; window._RestockRocketConfig.cachedVariantShippingTextsMarketKey = "variant_shipping_texts_for_market_382140642";window._RestockRocketConfig.sellingPlans = [{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":713071886719,"enabled":true,"variant_ids":[55569933140351,55569712382335,55569712415103,55569712480639,55569933173119,55570017616255,55569933074815,55570017550719,55569712447871,55569933107583,55570017583487],"product_variants_source":"custom","name":"Preorder","preorder_button_text":"Preorder","preorder_button_description":"Note: This is a preorder. Items will ship based on the estimated delivery date.","preorder_button_description_background_color":"#ebebeb","preorder_button_description_text_color":"#000000","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_limit":false,"preorder_button_description_quantity_limit_suffix":" units available for Position":"bottom-right","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":7770198835426,"title":"Clif Shot Blocks - Strawberry","handle":"clif-shot-blocks-strawberry","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eTrain hard to the tune of sweet strawberry energy.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eCLIF BLOKS Energy Chews are semi-solid, easy-to-chew sources of carbohydrates—your body's preferred source of fuel during activity.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eHalf a packet of CLIF BLOKS can be eaten 15 minutes
    e = 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.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 ||
    ]; 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; } } // 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?.them
    e?.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 - using expired cached settings as fallback'); initializeScripts(cachedSettings); } else { co updateCartSellingPlans(); } // Dispatch custom event when app is loaded const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabled: settings.enable_app, settings: settings } }); console.debug('STOQ - dispatching app loaded event'); window.dispatchEvent(appLoadedEvent); } } function updateCartSellingPlans() { // Wait for the API to be available with retries const maxRetries = 10; const retryDelay = 500; function attemptCartCheck(attempt = 1) { 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'); } })
    <
    agment=\"1\"\u003eShimano R7020 Hydraulic Brakes\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eX2 King Stainless Steel Cages\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eDT370 Hubs \/ G540 Rim - tubeless compatible - 700c\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eSchwalbe Marathon Plus tyres - 700c \/ 38mm\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eBrooks B17 Saddle and Bartape\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eCane Creek Headset\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThanks for considering ProjektRide for your next purchase. All bikes are fully assembled and test rode before leaving our bike shop in Edinburgh.  Please allow 5-7 days for bicycle delivery although we aim to post bikes out the same day.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eIf any purchases are to be made using any cycle to work schemes, please either pop into the shop or get in touch via email\/phone to get the ball rolling. If you are not 100% sure with bike sizing, please feel free to contact us to double check.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eAll bike sales include a free running in service after 6-10 weeks.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e \u003c\/p\u003e","published_at":"2022-09-29T14:43:20+01:00","created_at":"2022-09-29T14:43:18+01:00","vendor":"Surly","type":"Bicycles","tags":["Disc Trucker","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":250000,"price_min":250000,"price_max":250000,"available":false,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":43464920006882,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Custom Build Surly Disc Trucker","public_title":null,"options":["Default Title"],"price":250000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1979.heic?v=1664459005","\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1980.heic?v=1664459005","\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1981.heic?v=1664459004","\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1982.heic?v=1664459006","\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1983.heic?v=1664459004","\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1984.heic?v=1664459004","\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1985.heic?v=1664459002","\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1986.heic?v=1664459002"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1979.heic?v=1664459005","options":["Title"],"media":[{"alt":null,"id":30837269594338,"position":1,"preview_image":{"aspect_ratio":1.333,"height":3024,"width":4032,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1979.heic?v=1664459005"},"aspect_ratio":1.333,"height":3024 ,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1979.heic?v=1664459005","width":4032},{"alt":null,"id":30837269627106,"position":2,"preview_image":{"aspect_ratio":0.75,"height":4032,"width":3024,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1980.heic?v=1664459005"},"aspect_ratio":0.75,"height":4032,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1980.heic?v=1664459005","width":3024},{"alt":null,"id":30837269659874,"position":3,"preview_image":{"aspect_ratio":0.75,"height":4032,"width":3024,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1981.heic?v=1664459004"},"aspect_ratio":0.75,"height":4032,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1981.heic?v=1664459004","width":3024},{"alt":null,"id":30837269692642,"position":4,"preview_image":{"aspect_ratio":1.333,"height":3024,"width":4032,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/IMG_1982.heic?v=1664459006"},"aspect_ratio":1.333,"height":3024,"media_typ