Kosovo (EUR€)
Stems
Latvia (EUR€) Grips & Bar-TapeHeader Image
Headsets
Lesotho (GBP£)
See More
Libya (GBP£) Lithuania (EUR€)
Brake Spares
Luxembourg (EUR€)
Forks
Madagascar (GBP£) See More Tubeless

Pedals
Gears & Drivetrain See More
Ukraine (UAH₴)
© 2026, Powered by .
Frog
American Express
Kona
Surly UTO (ex Eovolt)
Discover

The Allant+ 6 is a deluxe city electric bike for soaring through commutes and exploring down gravel paths. It's equipped with the Bosch smart system that offers more connectivity than ever before. Pair your smartphone with your bike to log activities, plan routes and more. Available with your choice of battery size, ranging from 400 to 800-watt hours, so you can cruise comfortably all the way home. Plus, it's topped off with upgraded components where it matters mostEarly RiderGoogle Pay

Suggested search terms

 

Argon 18Klarna
MaestroAbout Us
Second-Hand BikesMastercard
Contact Us
See More
PayPal
Blog
Shop Pay

*Please note – spec applies to all sizes unless listed separatelyShop All Second-Hand

Track Service Progress
Union Pay
plies_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_background_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_tedown_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,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}];(function() { const cachedData = {"plans":[{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":713071886719,"enabled":true,"variant,"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,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}],"disabled_plan_ids":[713813721471,713176482175,714631872895],"cached_at":"2026-04-09T09:16:46Z"}; if (cacheda luggage carrier, it's ready for anything from a mountainous tour to the weekday commute. Ground-hugging suspension comfort is standard courtesy of a RockShox Psylo Silver RC fork and Deluxe Select R shock, combined with grippy Schwalbe Smart Sam 2.6in tyres. The powerful Bosch CX motor provides boost via Shimano's peerless XT 12-speed gears and an 800Wh battery with Purion 200 controller. And strong Shimano hydraulic disc brakes are the anchors you need to keep everything in check, whatever the weather.\u003cbr\u003e\u003cbr\u003e\u003cstrong\u003eFrame description\u003c\/strong\u003e\u003cbr\u003eOur mountain bike Swiss army knife comes complete with a semi-integrated luggage carrier, full length mudguards, a lighting set and sturdy kickstand. But that's just the start. The heart of the Stereo Hybrid ONE22 FE is the Bosch CX drive and a high capacity 800Wh battery. Comfort Geometry and our proven four-bar suspension system work together to keep your wheels tracking true on even the longest rides. Integrate003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHeadset\u003c\/th\u003e\n\u003ctd\u003eACROS AZF-1034, ICR (Integrated Cable Routing), Top Zero-Stack 1 1\/2\" (ZS 56mm), Bottom Zero-Stack 1 1\/2\" (ZS 56mm), X-Connect Interface\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eStem\u003c\/th\u003e\n\u003ctd\u003eCUBE Performance Stem E-MTB 35, FPI-Link\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHandlebar\u003c\/th\u003e\n\u003ctd\u003eCUBE Rise Trail Bar 35\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGrips\u003c\/th\u003e\n\u003ctd\u003eACID Hybrid Perform\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRear derailleur\u003c\/th\u003e\n\u003ctd\u003eShimano XT RD-M8100-SGS, ShadowPlus, 12-Speed\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eShifters\u003c\/th\u003e\n\u003ctd\u003eShimano Deore SL-M6100-R, Rapidfire Plus\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBrakes\u003c\/th\un\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003ePedals\u003c\/th\u003e\n\u003ctd\u003eACID PP MTB\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSaddle\u003c\/th\u003e\n\u003ctd\u003eACID Venec EMTB Plus 145\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSeatpost\u003c\/th\u003e\n\u003ctd\u003eCUBE Dropper Post, Handlebar Lever, Internal Cable Routing, 31.6mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSeat post = dropper Yes\/No\u003c\/th\u003e\n\u003ctd\u003eYES\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFront light\u003c\/th\u003e\n\u003ctd\u003eACID Front Light PRO-E 150 X-Connect, 12V, DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRear light\u003c\/th\u003e\n\u003ctd\u003eACID Mudguard Rear Light PRO-E, 12V, DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eKickstand\u003c\/th\u003e\n\u003ctd\u003eACID FM Pure Kickstand\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMu


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_background_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_selliw Date(maxUpdatedAt) : null; const useCached = !maxUpdatedAt || (cachedDate && !isNaN(cachedDate) && (!maxDate || cachedDate > maxDate)); if (useCached) { if (Array.isArray(cachedData.plans)) { window._RestockRocketConfig.sellingPlans = cachedData.plans; // Only use disabled_plan_ids when using cached plans window._RestockRocketConfig.disabledSellingPlanIds = cachedData.disabled_plan_ids || []; console.debug('[RR] Using selling plans from cachedSellingPlans (cached_at: ' + cachedData.cached_at + ')'); } } else { // When using old format (stale cache), don't trust disabled_plan_ids window._RestockRocketConfig.disabledSellingPlanIds = []; console.debug('[RR] Using selling plans from old format (max updated_at: ' + maxUpdatedAt + ')'); } } })();window._RestockRocketConfig.enabledNotifyMeVariantIds = [];window._RestockRocketConfig.disabledNotifyMeVariantIds = [];window._Rest
\u003cth\u003eNet weight (kg)\u003c\/th\u003e\n\u003ctd\u003e28.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGross weight (kg)\u003c\/th\u003e\n\u003ctd\u003e32.46\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMax. system weight (kg)\u003c\/th\u003e\n\u003ctd\u003e150\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMax. rider weight (kg)\u003c\/th\u003e\n\u003ctd\u003e120\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBody size\u003c\/th\u003e\n\u003ctd\u003e1.77m - 1.87m\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eAccessories\u003c\/th\u003e\n\u003ctd\u003e93250,93490\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e","published_at":"2026-06-13T11:51:05+01:00","created_at":"2026-06-13T11:51:06+01:00","vendor":"CUBE","type":"Hybrid MTB","tags":["Bosch Drive Unit Performance Line CX max. 120Nm (BDU38)","Bosch PowerTube 800","CUBE","Electric Bike","Hybrid MTB","NEW 2026","spo-cs-disabled","sp
Second-Hand Bikesey\/chrome \/ L","options":["Step-over","slapgrey\/chrome","L"],"price":399900,"weight":32460,"compare_at_price":null,"inventory_management":"shopify","barcode":"4054571487827","featured_media":{"alt":"CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY\/CHROME","id":71336095482239,"position":1,"preview_image":{"aspect_ratio":1.794,"height":1115,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230.jpg?v=1781347869"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":57747183239551,"title":"Step-over \/ slapgrey\/chrome \/ M","option1":"Step-over","option2":"slapgrey\/chrome","option3":"M","sku":"101230M","requires_shipping":true,"taxable":true,"featured_image":{"id":84875947213183,"product_id":15720154661247,"position":1,"created_at":"2026-06-13T11:51:06+01:00","updated_at":"2026-06-13T11:51:09+01:00","alt":"CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY\/CHROME","width":2000,"height":1115,"src":"\/\/projektride.co.uk\/cdn\/shop\/file
,"product_id":15720154661247,"position":1,"created_at":"2026-06-13T11:51:06+01:00","updated_at":"2026-06-13T11:51:09+01:00","alt":"CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY\/CHROME","width":2000,"height":1115,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230.jpg?v=1781347869","variant_ids":[57747183206783,57747183239551,57747183272319,57747183305087]},"available":false,"name":"CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY\/CHROME - Step-over \/ slapgrey\/chrome \/ S","public_title":"Step-over \/ slapgrey\/chrome \/ S","options":["Step-over","slapgrey\/chrome","S"],"price":399900,"weight":32460,"compare_at_price":null,"inventory_management":"shopify","barcode":"4054571487803","featured_media":{"alt":"CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY\/CHROME","id":71336095482239,"position":1,"preview_image":{"aspect_ratio":1.794,"height":1115,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230.jpg?v=1781347869"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"
Shop All Second-HandREY\/CHROME","id":71336095482239,"position":1,"preview_image":{"aspect_ratio":1.794,"height":1115,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230.jpg?v=1781347869"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/101230.jpg?v=1781347869","\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_00.jpg?v=1781347869","\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_01.jpg?v=1781347869","\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_02.jpg?v=1781347869","\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_03.jpg?v=1781347869","\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_04.jpg?v=1781347869"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230.jpg?v=1781347869","options":["Frame Style","Colour","Size"],"media":[{"alt":"CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY\/CHROME","id":71336095482239,"position":1,"preview_image":{"aspect_ratio":1.794,"height":1115,"wid
:"CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY\/CHROME image 4","id":71336095580543,"position":4,"preview_image":{"aspect_ratio":1.778,"height":1125,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_02.jpg?v=1781347869"},"aspect_ratio":1.778,"height":1125,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_02.jpg?v=1781347869","width":2000},{"alt":"CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY\/CHROME image 5","id":71336095613311,"position":5,"preview_image":{"aspect_ratio":1.778,"height":1125,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_03.jpg?v=1781347869"},"aspect_ratio":1.778,"height":1125,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_03.jpg?v=1781347869","width":2000},{"alt":"CUBE STEREO HYBRID ONE22 RACE 800 FE SLABGREY\/CHROME image 6","id":71336095646079,"position":6,"preview_image":{"aspect_ratio":1.778,"height":1125,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/101230_D_04.jpg?v=178
Custom Builds knife comes complete with a semi-integrated luggage carrier, full length mudguards, a lighting set and sturdy kickstand. But that's just the start. The heart of the Stereo Hybrid ONE22 FE is the Bosch CX drive and a high capacity 800Wh battery. Comfort Geometry and our proven four-bar suspension system work together to keep your wheels tracking true on even the longest rides. Integrated cable routing flatters the frame's elegant looks. A Direct Mount chain guard and UDH dropout may not sound exciting, but they're the little details that help make the difference. And, with Size Split, there's a perfectly proportioned option for pretty much every rider.\u003c\/div\u003e\u003ch3\u003eSpecification\u003c\/h3\u003e\u003ctable\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eFrame\u003c\/th\u003e\n\u003ctd\u003eAluminum Superlite, Gravity Casting Technology, Efficient Comfort Control, FSP 4-Link, Agile Comfort Geometry, Boost 148, UDH™, Full Integrated Battery, Advanced Internal Cable Routing, Kickstand\/Fe
m\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRear derailleur\u003c\/th\u003e\n\u003ctd\u003eShimano XT RD-M8100-SGS, ShadowPlus, 12-Speed\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eShifters\u003c\/th\u003e\n\u003ctd\u003eShimano Deore SL-M6100-R, Rapidfire Plus\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBrakes\u003c\/th\u003e\n\u003ctd\u003eShimano BR-MT520, Hydr. Disc Brake (203\/203)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCrankset\u003c\/th\u003e\n\u003ctd\u003eACID MTB Hybrid Pro, 38T\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCrankset chainring sizes\u003c\/th\u003e\n\u003ctd\u003e38T\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCassette\u003c\/th\u003e\n\u003ctd\u003eShimano Deore CS-M6100, 10-51T\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eNumber of gears\u003c\/th\u003e\n\u003ctd\u003e12\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u00
ACID Front Light PRO-E 150 X-Connect, 12V, DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRear light\u003c\/th\u003e\n\u003ctd\u003eACID Mudguard Rear Light PRO-E, 12V, DC\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eKickstand\u003c\/th\u003e\n\u003ctd\u003eACID FM Pure Kickstand\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMudguard\u003c\/th\u003e\n\u003ctd\u003eACID 65\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBell\u003c\/th\u003e\n\u003ctd\u003eKnog Oi\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCarrier\u003c\/th\u003e\n\u003ctd\u003eACID Carrier SIC 2.0 Rail Boost\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eEngine\u003c\/th\u003e\n\u003ctd\u003eBosch Drive Unit Performance Line CX max. 120Nm (BDU38)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eEngine ready for the Bosch 120 Nm update?\u003c\/th\u003e\n\u003ctd\u003eYES\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\/th\u003e\n\u003ctd\u003e93250,93490\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\u003c\/table\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {57747183206783 : "deny",57747183239551 : "deny",57747183272319 : "deny",57747183305087 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {57747183206783 : parseInt("0"),57747183239551 : parseInt("0"),57747183272319 : parseInt("0"),57747183305087 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {57747183206783 : parseInt(""),57747183239551 : parseInt(""),57747183272319 : parseInt(""),57747183305087 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {57747183206783 : null,57747183239551 : null,57747183272319 : null,57747183305087 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {57747183206783 : parseInt(""),57747183239551 : parseInt(""),57747183272319 : parseInt(""),57747183305087 : parseInt(""),}; window._RestockRocketConfig.variantsPre
us at least one preorder variant id, // independent of the block toggle. Fail-open: on error the flag stays unset and both // consumers no-op. try { var _sqCfg = window._RestockRocketConfig; var _sqPlanEnabled = Array.isArray(_sqCfg.sellingPlans) && _sqCfg.sellingPlans.some(function (p) { return p && p.enabled; }); var _sqPreCount = ((_sqCfg.cachedPreorderVariantIds && _sqCfg.cachedPreorderVariantIds.preorder_variant_ids) || []).length; _sqCfg.preordersConfigured = !!(_sqPlanEnabled && _sqPreCount); } catch (e) { /* fail open */ } // STOQ-1612: block (not hide) Buy Now / Shop Pay until our JS runs, so a tap in the // load window can't bypass preorder. pointer-events via .stoq-buy-now-pending (no // reflow); timeout releases; renderPreorderButton / featured_product.js lift it. // Gated by the `block_accelerated_checkout` toggle (default OFF) for gradual rollout. // Armed ONLY when we're sure preorder is in play — product page: THIS product has a // preorder va
st.add('stoq-buy-now-pending'); setTimeout(function () { document.documentElement.classList.remove('stoq-buy-now-pending'); }, 6000); } } catch (e) { /* fail open */ } window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-product.js' window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-product-bis.js' window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-collection-bis.js' window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, wi
<<<che age if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; window._RestockRocketConfig.liquidCacheAge = null; } else { const now = Math.floor(Date.now() / 1000); // Current time in seconds const liquidCacheAge = now - liquidRenderedAt; // Age in seconds // Surfaced into funnel events: a stale cache means the app rendered with // outdated inventory/selling-plan data — a real "had the opportunity but // failed" cause. Negative (client clock ahead) clamps to 0. window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); // Handle client clock ahead of server if (liquidCacheAge = LIQUID_CACHE_MAX_AGE) { console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else { console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`); window._RestockRocketConfig.isLiquidCacheFresh = false; } } function checkSettingsExpiry(settings) { try { if (!settings || !settings.updated_at) { console.debug('STOQ - Invalid settings data structure'); return null; } if (!settings.cache) { console.debug('STOQ - settings caching disabled'); return null; } // 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 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') // Fire stoq_initialized once per page load so the funnel pipeline has a definitive // "our code ran on this page" signal independent of any cusctedVariantId || '', liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0, app_version: _stoqInitConfig.appVersion || '', liquid_cache_age: _stoqInitConfig.liquidCacheAge, // Selected variant's stock posture as our app saw it at render — explains // whether we *should* have treated it as a preorder candidate. inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '', inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId], }); } catch (e) { console.debug('STOQ - stoq_initialized publish failed:', e); } // STOQ-1595: publish stoq_accelerated_checkout_clicked for every accelerated-checkout // click (Buy Now / dynamic checkout / Shop Pay installments) on ALL surfaces, before our // bundle loads, via one delegated capture-phase listener (catches late-rendered buttons). // Only on shops with preorders configured (shared `preordersConfigured` signal from the // derivatist('form'); var vidEl = form && form.querySelector('[name="id"]'); var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || ''; // The enabled STOQ selling plan the clicked variant belongs to (if any), found once and // reused for in_enabled_plan / enrolled_plan_id / enrolled_plan_provider below. var _sqVidNum = Number(variantId); var _sqPlan = null; // Array.isArray guard (not `|| []`) so a truthy non-array sellingPlans can't throw and // silently drop the whole publish. var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : []; _sqPlans.forEach(function (pl) { if (!_sqPlan && pl && pl.enabled && Array.isArray(pl.variant_ids) && pl.variant_ids.indexOf(_sqVidNum) !== -1) { _sqPlan = pl; } }); Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', { variant_id: variantId, product_id: (_sqTrcceleratedGateArmed, gate_active_at_click: !!(document.documentElement && document.documentElement.classList.contains('stoq-buy-now-pending')), }, }); } catch (err) { /* never break checkout */ } }, true); } } catch (e) { /* fail open */ } 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 || {})< "settings") { value } } }'; fetch( `https://${cfg.shop}/api/2025-07/graphql.json`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken, }, body: JSON.stringify({ query: query, variables: { namespace: cfg.metafieldNamespace } }), } ) .then(function(response) { if (!response.ok) { throw new Error('Storefront API HTTP ' + response.status); } return response.json(); }) .then(function(body) { if (body && body.errors && body.errors.length) { throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', ')); } const value = body && body.data && body.data.shop && body.data.shop.metafield && body.data.shop.metafield.value; if (!value) { throw new Error('Storefront API returned no settings metafield value'); } cfg.stop' }; 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 - using expired cached settings as fallback'); initializeScripts(cachedSettings); } else { console.error('S } }), fetchEmbedConfig('integrations', function(data) { if (Array.isArray(data)) { window._RestockRocketConfig.integrations = data; } }) ]), new Promise(function(resolve) { setTimeout(resolve, 1000); }) ]).then(function() { loadScripts(settings); }); return; } loadScripts(settings); } function loadScripts(settings) { // 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); }) // STOQ-1520: serve the lean back-in-stock-only build (no preorder/hijack code) // only to shops with NO preorder plans. Use the full build if preorder is oCycle To Work Schemes See More Parts & ComponentsBrandsEnveCockpitHandlebarsStemsGrips & Bar-TapeHeadsets
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 age = Date.now() - updatedAt.getTime(); if (age
a like-typed compare. is_preorder_variant: (function () { var vid = Number(variantId); var has = function (a) { return Array.isArray(a) && a.indexOf(vid) !== -1; }; return has(_sqTrack.preorderVariantIds) || has(_sqTrack.cachedPreorderVariantIds && _sqTrack.cachedPreorderVariantIds.preorder_variant_ids); })(), // Narrow, authoritative preorder signal: enrolled in an ENABLED STOQ selling plan // (is_preorder_variant above is the broad OOS+continue heuristic — non-STOQ too). in_enabled_plan: !!_sqPlan, // In-stock preorder signal: enrolled but currently IN STOCK (in the inStockVariantIds // set, not the OOS preorderVariantIds set). Same live-OR-cached pattern as // is_preorder_variant. is_preorder_variant OR is_instock_variant = "should sell via // the plan" regardless of stock, so an in-stock preordtion setupCartSellingPlanUpdater(settings) { // Setup listener regardless - updateCartSellingPlans has its own guards // This ensures cleanup happens even when preorders are disabled globally // Listen for stoq:inventory-data-loaded event dispatched by api.js window.addEventListener('stoq:inventory-data-loaded', function(event) { console.debug('STOQ - Inventory data loaded, updating cart selling plans'); if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { window._RestockRocket.updateCartSellingPlans() .then(hasUpdates => { if (hasUpdates) { console.debug('STOQ - cart selling plans updated successfully'); } else { console.debug('STOQ - no cart selling plan updates needed'); } }) .catch(error => { console.error('STOQ - error updating cart selling plans:', error); }); } }); } // ---- Live settings via the Storefront API (ad
endpoint + ':', applyError); throw applyError; } }) .catch(function(error) { console.debug(`STOQ - using cached ${endpoint}:`, error.message); }); } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); // Stale-Liquid resilience (default-on, per-shop opt-out via the // `disable_refresh_on_stale_liquid` Toggle, surfaced as the negative // `disable_refresh_on_stale_liquid` flag in settings.json so that // `undefined` -- in CDN-cached metafield payloads that predate this // key -- reads as `!undefined === true` and gets default-on behavior // immediately, no metafield rewrite required). // When the Liquid CDN cache is older than LIQUID_CACHE_MAX_AGE the in-page // selling_plans / integrations metafields can be wrong; refresh both from // the API before launching scronPageTypes = ['collection', 'index', 'search', 'page']; if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pageType}_enabled`])) { createRestockRocketScript(collectionScriptUrl); } else if(pageType === 'product') { createRestockRocketScript(productScriptUrl); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(usePreorderBuild) { // cart/article/blog/list-collections: full build so the cart sweep runs. createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { console.debug(`STOQ - no scripts enabled for ${pageType}`); }
Custom Builds
Size:Insure Your BikePedals  L, XL Book a Service
ProWheel alloy, 175 mm length Gears & Drivetrain
Chainring ProWheel 40T narrow/wide steel, w/alloy guardComponents
Hope
Brakes
Complete Brakes
Brake Rotors
Brake Pads
Brake SparesForksRear Suspension Socks Finishing Kit TyresTubelessE-bike Batteries and chargers WheelsComplete WheelsTubelessClothing and ProtectionSee More
Front Suspension
Tubes
Saddles
Components
Tools & Maintenance ProjektRide Merchandise




Bikes
New Bikes See More

Search for products on our siteContact Us


Open search bar

Suggested search terms
About Us
Blog
Track Service Progress
Building Your Bike From the Box
Insure Your Bike

  • Trek

    Amflow
  • Yeti

    Ridgeback

    Brother

Genesis