This site has limited support for your browser. We recommend switching to Edge, Chrome, Safari, or Firefox.

Cart

Header Image

All Products

Saddles
Essentials  
Clear filters ( 0) Clear filters ( 0
Bottles and Cages
div class="result__image" data-aspectratio="{{ it.product.image.aspectRatio }}" data-product-image> <
a href="{{ it.product.url }}" class="result__image-link" aria-label='{{ it.product.title }}'> <div class="result__image-img product__media lazyload fade-in" data-bgset="{{ it.product.image.thumb }}" data-aspectratio="{{ it.product.image.aspectRatio }}" Yetdata-sizes="auto"> {{@if(it.product.badgeText)}} i Cycles SB120 C-Series C2 29" Bike<div class="product__tag{{ it.product.badgeClasses }}"> <span>{{ it.product.badgeText | safe }} > {{/if}} a class="product__media product__media--featured" href="/collections/all-products/products/yeti-cycles-sb120-c-series-c2-29-bike" title="Yeti Cycles SB120 C-Series C2 29" Bike" aria-label="Yeti Cycles SB120 C-Series C2 29" Bike" style="background-image: url(//projektride.co.uk/cdn/shop/files/ycb2312029c2du_600x.webp?v=1741953520)"> span class="visually-hidden">Yeti Cycles SB120 C-Series C2 29" Bike > > <p class="result__title"> <li class="result result--full"> <
p class="result__title">{{ it.item.text }} > Yeti Cycles SB120 C-Series C2 29" Bike
RIDE CONFIDENTYeti Cycles SB120 T-Series 29" Frame £4,299.00
#ProductTemplate--template--15326745395426__main { background: #ffffff; } .shop-pay-terms { --payment-terms-background-color: #ffffff }Teal
Muc-Off Biodegradable Bike Cleaner has an incredibly effective cleaning formula containing 'Nano Technology' that also cares for your bike's delicate finishes. It contains no harmful acids, CFC's or solvents and is fully biodegradable.
Yeti Cycles SB140 C-Series C2 Lunch Ride 29" Factory BikeMO-94 £6,699.00Looking for an all round wonder spray? Look no further! Muc-Off MO-94 covers all the bases with its incredible PTFE formula to quickly and effectively penetrate moisture, lubricate moving parts and leave a long lasting protective film. MO-94 prevents dirt adhesion and also drives out excess water to keep rust and corrosion at bay.
Biodegradable Wet LubeGrey
Muc-Off Biodegradable Wet Chain Lube is an ultra durable, long distance bicycle chain lubricant, it’s been specifically formulated to excel over long distances in wet or muddy conditions. Our state of the art formula has been derived from natural ingredients and made completely from renewable sources. It penetrates deep into your chain link’s to provide long lasting lubrication and total protection. Our integral ’Extreme Pressure Additives’ coat every part of the link to provide a silky smooth gear change and an ultra efficient drive chain.Blue
Contains Nano Tech Bike Cleaner 
Yeti Cycles SB140 T-Series 29" FrameContains MO-94 Contains Biodegradable Wet LubeCleaners Degreasers and Lubrication","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":1649,"price_min":1649,"price_max":1649,"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":42133920153826,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"20289","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Muc-Off Clean, Protect and Lube Kit","public_title":null,"options":["Default Title"],"price":1649,"weight":1500,"compare_at_price":null,"inventory_management":"shopify","barcode":"PREA03112021.1622","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/muc-off-wash-protect-lube-kit-dry-lube-version-21b-muf-mu-kit-0851-black-1.jpg?v=1639608693"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/products\/muc-off-wash-protect-lube-kit-dry-lub e-version-21b-muf-mu-kit-0851-black-1.jpg?v=1639608693","options":["Title"],"media":[{"alt":null,"id":28852728987874,"position":1,"preview_image":{"aspect_ratio":1.0,"height":550,"width":550,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/muc-off-wash-protect-lube-kit-dry-lube-version-21b-muf-mu-kit-0851-black-1.jpg?v=1639608693"},"aspect_ratio":1.0,"height":550,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/muc-off-wash-protect-lube-kit-dry-lube-version-21b-muf-mu-kit-0851-black-1.jpg?v=1639608693","width":550}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e Nano Tech Bike Cleaner\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMuc-Off Biodegradable Bike Cleaner has an incredibly effective cleaning formula containing 'Nano Technology' that also cares for your bike's delicate finishes. It contains no harmful acids, CFC's or solvents and is fully biodegradable.\u003c\/p\u003e\n\u003cp
data-mce-fragment=\"1\"\u003eMO-94\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eLooking for an all round wonder spray? Look no further! Muc-Off MO-94 covers all the bases with its incredible PTFE formula to quickly and effectively penetrate moisture, lubricate moving parts and leave a long lasting protective film. MO-94 prevents dirt adhesion and also drives out excess water to keep rust and corrosion at bay.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eBiodegradable Wet Lube\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMuc-Off Biodegradable Wet Chain Lube is an ultra durable, long distance bicycle chain lubricant, it’s been specifically formulated to excel over long distances in wet or muddy conditions. Our state of the art formula has been derived from natural ingredients and made completely from renewable sources. It penetrates deep into your chain link’s to provide long lasting lubrication and total protection. Our integral ’Extreme Pressure Additives’ coat every part of th e link to provide a silky smooth gear change and an ultra efficient drive chain.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eContains Nano Tech Bike Cleaner \u003c\/li\u003e\n\u003cli\u003eContains MO-94\u003c\/li\u003e\n\u003cli\u003eContains Biodegradable Wet Lube\u003c\/li\u003e\n\u003c\/ul\u003e"}
{ "@context": "http://schema.org/", "@type": "Product", "name": "Muc-Off Clean, Protect and Lube Kit", "url": "https:\/\/projektride.co.uk\/products\/muc-off-clean-protect-and-lube-kit","image": [ "https:\/\/projektride.co.uk\/cdn\/shop\/products\/muc-off-wash-protect-lube-kit-dry-lube-version-21b-muf-mu-kit-0851-black-1_550x.jpg?v=1639608693" ],"description": "\n Nano Tech Bike Cleaner\nMuc-Off Biodegradable Bike Cleaner has an incredibly effective cleaning formula containing 'Nano Technology' that also cares for your bike's delicate finish
es. It contains no harmful acids, CFC's or solvents and is fully biodegradable.\nMO-94\nLooking for an all round wonder spray? Look no further! Muc-Off MO-94 covers all the bases with its incredible PTFE formula to quickly and effectively penetrate moisture, lubricate moving parts and leave a long lasting protective film. MO-94 prevents dirt adhesion and also drives out excess water to keep rust and corrosion at bay.\nBiodegradable Wet Lube\nMuc-Off Biodegradable Wet Chain Lube is an ultra durable, long distance bicycle chain lubricant, it’s been specifically formulated to excel over long distances in wet or muddy conditions. Our state of the art formula has been derived from natural ingredients and made completely from renewable sources. It penetrates deep into your chain link’s to provide long lasting lubrication and total protection. Our integral ’Extreme Pressure Additives’ coat every part of the link to provide a silky smooth gear change and an ultra efficient drive chain.\n\nContains Nano Tech B ike Cleaner \nContains MO-94\nContains Biodegradable Wet Lube\n","sku": "20289","brand": { "@type": "Thing", "name": "Muc-Off" },"gtin8": "PREA03112021.1622","offers": [{ "@type" : "Offer","sku": "20289","availability" : "http://schema.org/InStock", "price" : 16.49, "priceCurrency" : "GBP", "url" : "https:\/\/projektride.co.uk\/products\/muc-off-clean-protect-and-lube-kit?variant=42133920153826" } ] }
Yeti Cycles SB160 C-Series C2 29" Bike Life Systems Pocket First Aid Kit - HIRE
< 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)">
£0.00
Yeti Cycles SB160 T-Series 29" Frame Large - Sale < span class="visually-hidden">Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable
£0.00 <
QUICK LINKS£6,799.00
About UsRawContact Us
Building Your Bike From the BoxRaw GlossInsure Your Bike
Privacy Policy
window._RestockRocketConfig = window._RestockRocketConfig || {} // Helper function to normalize locale format from hyphen to underscore (e.g., 'en-US' -> 'en_us') // This matches the backend's Mobility.normalize_locale behavior // Returns empty string if locale is empty or invalid (matches original behavior) function normalizeLocale(locale) { if (!locale || locale.trim() === '') { return ''; } return locale.toString().toLowerCase().replace(/-/g, '_'); } window._RestockRocketConfig.locale = 'en'; window._RestockRocketConfig.normalizedLocale = normalizeLocale('en'); window._RestockRocketConfig.shop = 'projektride.myshopify.com'; window._RestockRocketConfig.pageType = 'product';window._RestockRocketConfig.marketId = 382140642;window._RestockRocketConfig.countryName = 'United Kingdom'; window._RestockRocketConfig.countryIsoCode = 'GB';window._RestockRocketConfig.cartInventoryQuantity = {};window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_id":38436,"currency":"GBP","created_at":"2025-07-26T09:13:57.337Z","updated_at":"2025-11-11T14:27:02.312Z","enable_app":true,"enable_signup_widget":false,"storefront_button_text":"Notify me when available","storefront_button_text_color":"#FFFFFF","storefront_button_background_color":"#202223","storefront_form_header":"Notify me","storefront_form_description":"Get a notification as soon as this product is back in stock by signing up below!","storefront_form_button_text":"Notify me when available","storefront_form_button_text_color":"#FFFFFF","storefront_form_button_background_color":"#202223","storefront_form_terms":"Promise we won't spam. You'll only receive notifications for this product.","storefront_form_error":"Please enter a valid email a ddress","storefront_form_success":"Thank you! We will notify you when the product is available.","enable_powered_by":true,"show_button_on_preorder":true,"sms_enabled":false,"email_enabled":true,"storefront_button_disable_tag":"rocket-hide","theme_config":{},"storefront_form_email_placeholder":"Email address","storefront_form_phone_placeholder":"SMS","storefront_form_phone_label":"Phone number","storefront_form_email_label":"Email","storefront_form_phone_error":"Please enter a valid phone number","storefront_form_customer_name_placeholder":"Name","storefront_form_customer_name_error":"Please enter your name","storefront_form_did_you_mean_error":"Did you mean %{suggested_email}? Or use %{current_email}","form_customer_name_enabled":false,"form_customer_name_required":false,"css_config":"","js_config":null,"collect_promotion_consent":false,"storefront_form_promotion_consent_label":"Notify me about other news, sales, discounts & offers too","show_button_on_collection":false,"sms_default_country":"us","sms_restric0194,43981345652962,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,55569933074815,55570550194559,55570550227327,55604008976767,55638316908927,55638316941695,55638316974463,56220814999935,56220815032703,56270279606655,56270279639423,56270279672191,56314171064703,56314171097471,56398983725439,56398983758207,56398983790975,56399322251647],"updated_at":"2025-12-08T01:22:01Z","market_locations_enabled":false,"market_id":382140642,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2025-12-08T01:22:00Z","shopify_market_id":382140642,"market_locations_enabled":false}; window._RestockRocketConfig.cachedVariantPreorderLimitsMarketKey = "variant_preorder_limits_for_market_382140642";window._RestockRocketConfig.cachedVariantShippingTexts = {"variant_sh
ipping_texts":{},"updated_at":"2025-12-08T01:22:00Z","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":" un its available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_bac
kground_color":"#000000","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_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","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":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true}];window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuraYeti Cycles SB165 T-Series T3 29" / 27.5" Biketion":10000,"toastPosition":"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":7467994448098,"title":"Muc-Off Clean, Protect and Lube Kit","handle":"muc-off-clean-protect-and-lube-kit","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e Nano Tech Bike Cleaner\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMuc-Off Biodegradable Bike Cleaner has an incredibly effective cleaning formula containing 'Nano Technology' that also cares for your bike's delicate finishes. It contains no harmful acids, CFC's or solvents and is fully biodegradable.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMO-94\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eLooking for an all round wonder spray? Look no further! Muc-Off MO-94 covers all the bases with its incredible PTFE formula to quickly and effectively penetrate moisture, lubricate moving parts and leave a long lasting protective film. MO-94 prevents dirt adhesion and also drives out excess water to keep rust and corrosion at bay.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eBiodegradable Wet Lube\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMuc-Off Biodegradable Wet Chain Lube is an ultra durable, long distance bicycle chain lubricant, it’s been specifically formulated to excel over long distances in wet or muddy conditions. Our state of the art formula has been derived from natural ingredients and made completely from renewable sources. It penetrates deep into your chain link’s to provide long lasting lubrication and total protection. Our integral ’Extreme Pressure Additives’ coat every part of the link to provide a silky smooth gear change and an ultra efficient drive chain.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eCon tains Nano Tech Bike Cleaner \u003c\/li\u003e\n\u003cli\u003eContains MO-94\u003c\/li\u003e\n\u003cli\u003eContains Biodegradable Wet Lube\u003c\/li\u003e\n\u003c\/ul\u003e","published_at":"2024-12-08T20:03:57+00:00","created_at":"2021-12-07T17:25:36+00:00","vendor":"Muc-Off","type":"","tags":["Cleaners Degreasers and Lubrication","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":1649,"price_min":1649,"price_max":1649,"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":42133920153826,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"20289","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Muc-Off Clean, Protect and Lube Kit","public_title":null,"options":["Default Title"],"price":1649,"weight":1500,"compare_at_price":null,"inventory_management":"shopify","barcode":"PREA03112021.1622","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/muc-off-wash-protect-lube-kit-dry-lube-version-21b-muf-mu-kit-0851-black-1.jpg?v=1639608693"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/products\/muc-off-wash-protect-lube-kit-dry-lube-version-21b-muf-mu-kit-0851-black-1.jpg?v=1639608693","options":["Title"],"media":[{"alt":null,"id":28852728987874,"position":1,"preview_image":{"aspect_ratio":1.0,"height":550,"width":550,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/muc-off-wash-protect-lube-kit-dry-lube-version-21b-muf-mu-kit-0851-black-1.jpg?v=1639608693"},"aspect_ratio":1.0,"height":550,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/muc-off-wash-protect-lube-kit-dry-lube-version-21b-muf-mu-kit-0851-black-1.jpg?v=1639608693","width":550}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e Nano Tech Bike Cleaner\u003c\/p\u003e\n£8,750.00\u003cp data-mce-fragment=\"1\"\u003eMuc-Off Biodegradable Bike Cleaner has an incredibly effective cleaning formula containing 'Nano Technology' that also cares for your bike's delicate finishes. It contains no harmful acids, CFC's or solvents and is fully biodegradable.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMO-94\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eLooking for an all round wonder spray? Look no further! Muc-Off MO-94 covers all the bases with its incredible PTFE formula to quickly and effectively penetrate moisture, lubricate moving parts and leave a long lasting protective film. MO-94 prevents dirt adhesion and also drives out excess water to keep rust and corrosion at bay.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eBiodegradable Wet Lube\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMuc-Off Biodegradable Wet Chain Lube is an ultra durable, long distance bicycle chain lubricant, it’s been specifically formulated to excel over long distances in wet or muddy
conditions. Our state of the art formula has been derived from natural ingredients and made completely from renewable sources. It penetrates deep into your chain link’s to provide long lasting lubrication and total protection. Our integral ’Extreme Pressure Additives’ coat every part of the link to provide a silky smooth gear change and an ultra efficient drive chain.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eContains Nano Tech Bike Cleaner \u003c\/li\u003e\n\u003cli\u003eContains MO-94\u003c\/li\u003e\n\u003cli\u003eContains Biodegradable Wet Lube\u003c\/li\u003e\n\u003c\/ul\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {42133920153826 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {42133920153826 : parseInt("10"),}; window._RestockRocketConfig.variantsPreorderCount = {42133920153826 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {42133920153826 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {42133920153826 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {42133920153826 : null,}; window._RestockRocketConfig.variantsShippingText = {42133920153826 : "",}; window._RestockRocketConfig.variantsShippingTextForMarket = {42133920153826 : null,}; window._RestockRocketConfig.selected_variant_id = 42133920153826; 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/019af0d1-c518-7a22-bdbf-9ceff49063ad/restockrocket-1-402/assets/restockrocket-product.js' window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019af0d1-c518-7a22-bdbf-9ceff49063ad/restockrocket-1-402/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 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')Black; 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
< 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 || !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[keyBlue]; 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?.theme?.role === 'main') { headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema_name; headers['X-Shopify-Theme-Schema-Versi on'] = 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 { console.error('STOQ - failed to load settings:', error); } }) .catch(function(e) { console.error(e) }) } function initializeScripts(settings) { settings = applyTranslat
ions(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.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_sea rch_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.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._Res