Header Image

One Up Composite Pedals

Quantity
y_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 an d agree to the preorder terms and conditions for this product.","disable_button_until_acknowledged":false,"preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":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_ids":[55569712382335,55569712415103,55569712480639,55570017616255,55570017550719,55569712447871,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_enabled":true,"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 preorder","preorder_button_descri ption_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_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_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,"preorde r_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","disable_button_until_acknowledged":false,"preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":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 }} cldisabled_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._RestockRocketConfig.backInStockTemplates = [];window._RestockRocketConfig.restockNotes = {};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":{"toastDuration":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._Restock RocketConfig.product = {"id":8055472881890,"title":"One Up Composite Pedals","handle":"one-up-composite-pedals","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cdiv class=\"sixteen columns\" itemtype=\"http:\/\/data-vocabulary.org\/Product\" itemscope=\"\"\u003e\n\u003cdiv id=\"product-4461162856583\"\u003e\n\u003cdiv class=\"section product_section clearfix\"\u003e\n\u003cdiv class=\"seven columns omega\"\u003e\n\u003cdiv class=\"description\" itemprop=\"description\"\u003e\n\u003cp\u003e\u003cspan\u003eThe OneUp Composite Pedals features a huge (115x105mm) super grippy platform with 10 rear-loading steel pins per side to keep your feet planted on even the roughest of trails. With a weight of only 355g, they won't slow you down on the climbs. Designed from stealth rubber down and shaped with a subtle convex profile to provide you with more grip thanks to the pedals sitting in the natural arch of your foot. The thin leading edge chamfered design gives you maximum clearance to reduce pedal strikes and 9T20:46:31+00:00","alt":null,"width":966,"height":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Red-966_1024x1024_06dc371b-89e2-453b-a95e-683881e2526d.webp?v=1679258791","variant_ids":[43938299805922]},"available":true,"name":"One Up Composite Pedals - Red","public_title":"Red","options":["Red"],"price":3950,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":31696857727202,"position":2,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Red-966_1024x1024_06dc371b-89e2-453b-a95e-683881e2526d.webp?v=1679258791"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":43938299838690,"title":"Blue","option1":"Blue","option2":null,"option3":null,"sku":"1C0399BLU","requires_shipping":true,"taxable":true,"featured_image":{"id":39098412859618,"product_id":805547 2881890,"position":3,"created_at":"2023-03-19T20:46:27+00:00","updated_at":"2023-03-19T20:46:29+00:00","alt":null,"width":966,"height":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Blue-966_1024x1024_ef5051e5-c61a-4605-be01-28fe9a036fa4.webp?v=1679258789","variant_ids":[43938299838690]},"available":true,"name":"One Up Composite Pedals - Blue","public_title":"Blue","options":["Blue"],"price":3950,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":31696857759970,"position":3,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Blue-966_1024x1024_ef5051e5-c61a-4605-be01-28fe9a036fa4.webp?v=1679258789"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":43938299871458,"title":"Orange","option1":"Orange","option2":null,"option3":null,"sku":"1C0399ORA","requires_shipping":true,"taxable":true,"featured_image":{"id":39098412925154,"product_id":8055472881890,"position":4,"created_at":"2023-03-19T20:46:27+00:00","updated_at":"2023-03-19T20:46:30+00:00","alt":null,"width":966,"height":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Orange-966_1024x1024_c9208800-1063-465e-a00b-0880a280d6b5.webp?v=1679258790","variant_ids":[43938299871458]},"available":true,"name":"One Up Composite Pedals - Orange","public_title":"Orange","options":["Orange"],"price":3950,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":31696857792738,"position":4,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Orange-966_1024x1024_c9208800-1063-465e-a00b-0880a280d6b5.webp?v=1679258790"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id ":43938299904226,"title":"Green","option1":"Green","option2":null,"option3":null,"sku":"1C0399GRN","requires_shipping":true,"taxable":true,"featured_image":{"id":39098412957922,"product_id":8055472881890,"position":5,"created_at":"2023-03-19T20:46:27+00:00","updated_at":"2023-03-19T20:46:30+00:00","alt":null,"width":966,"height":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Green-966_1024x1024_45e415f3-561c-461a-924c-9d361cbf3df4.webp?v=1679258790","variant_ids":[43938299904226]},"available":true,"name":"One Up Composite Pedals - Green","public_title":"Green","options":["Green"],"price":3950,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":31696857825506,"position":5,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Green-966_1024x1024_45e415f3-561c-461a-924c-9d361cbf3df4.webp?v=1679258790"}},"requires_selling_p85d9c4b.webp?v=1679258790","width":966},{"alt":null,"id":31696857727202,"position":2,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Red-966_1024x1024_06dc371b-89e2-453b-a95e-683881e2526d.webp?v=1679258791"},"aspect_ratio":1.0,"height":966,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Red-966_1024x1024_06dc371b-89e2-453b-a95e-683881e2526d.webp?v=1679258791","width":966},{"alt":null,"id":31696857759970,"position":3,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Blue-966_1024x1024_ef5051e5-c61a-4605-be01-28fe9a036fa4.webp?v=1679258789"},"aspect_ratio":1.0,"height":966,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Blue-966_1024x1024_ef5051e5-c61a-4605-be01-28fe9a036fa4.webp?v=1679258789","width":966},{"alt":null, "id":31696857792738,"position":4,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Orange-966_1024x1024_c9208800-1063-465e-a00b-0880a280d6b5.webp?v=1679258790"},"aspect_ratio":1.0,"height":966,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Orange-966_1024x1024_c9208800-1063-465e-a00b-0880a280d6b5.webp?v=1679258790","width":966},{"alt":null,"id":31696857825506,"position":5,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Green-966_1024x1024_45e415f3-561c-461a-924c-9d361cbf3df4.webp?v=1679258790"},"aspect_ratio":1.0,"height":966,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Green-966_1024x1024_45e415f3-561c-461a-924c-9d361cbf3df4.webp?v=1679258790","width":966},{"alt":null,"id":31696857858274,"position":6,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Purple-966_1024x1024_67aaebad-c14d-414b-8a15-ed6535e4dc44.webp?v=1679258789"},"aspect_ratio":1.0,"height":966,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Purple-966_1024x1024_67aaebad-c14d-414b-8a15-ed6535e4dc44.webp?v=1679258789","width":966},{"alt":null,"id":31696857891042,"position":7,"preview_image":{"aspect_ratio":1.0,"height":966,"width":966,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Turquoise-966_1024x1024_2bf60d3e-0374-4147-87fb-58ce6b805716.webp?v=1679258790"},"aspect_ratio":1.0,"height":966,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/OneUp-Components-CompPedal-Top-Turquoise-966_1024x1024_2bf60d3e-0374-4147-87fb-58ce6b805716.webp?v=1679258790","width":966}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf- 8\"\u003e\n\u003cdiv class=\"sixteen columns\" itemtype=\"http:\/\/data-vocabulary.org\/Product\" itemscope=\"\"\u003e\n\u003cdiv id=\"product-4461162856583\"\u003e\n\u003cdiv class=\"section product_section clearfix\"\u003e\n\u003cdiv class=\"seven columns omega\"\u003e\n\u003cdiv class=\"description\" itemprop=\"description\"\u003e\n\u003cp\u003e\u003cspan\u003eThe OneUp Composite Pedals features a huge (115x105mm) super grippy platform with 10 rear-loading steel pins per side to keep your feet planted on even the roughest of trails. With a weight of only 355g, they won't slow you down on the climbs. Designed from stealth rubber down and shaped with a subtle convex profile to provide you with more grip thanks to the pedals sitting in the natural arch of your foot. The thin leading edge chamfered design gives you maximum clearance to reduce pedal strikes and deflect off trail obstacle.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3 dir=\"ltr\"\u003eFEATURES\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e10 rear loading\u003cspan\u003e \u003c\/span\u003eSteel\u003cspan\u003e \u003c\/span\u003epins \/ side, with Nyloc nuts\u003c\/li\u003e\n\u003cli\u003eDU plus cartridge bearing axle system\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eThin leading edge chamfered design to deflect off \u003c\/span\u003eobstacles\u003c\/li\u003e\n\u003cli\u003eWide platform design for increased stability\u003c\/li\u003e\n\u003cli\u003eContoured shape provides ultimate connected feel\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3\u003e\n\u003cspan\u003eSPECS\u003c\/span\u003e   \u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cspan\u003e\u003cstrong\u003eWeight:\u003c\/strong\u003e 355g \u003c\/span\u003e\u003cbr\u003e\u003cspan\u003e\u003cstrong\u003ePlatform Size:\u003c\/strong\u003e 115x105mm\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\u003cspan\u003e\u003cstrong\u003e# of Pins: \u003c\/strong\u003e10 per side\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv\u003e\u003cspan\u003e\u003cstrong\u003eAxle Material:\u003c\/strong \u003e Black chromoly steel\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cstrong\u003e\u003cspan\u003eHeight\u003c\/span\u003e:\u003c\/strong\u003e 18.5mm (13.3 at the leading edge)\u003c\/div\u003e\n\u003cdiv\u003e\u003cspan\u003e\u003cstrong\u003ePin to Axle distance:\u003c\/strong\u003e 108mm\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cstrong\u003eColor:\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e\u003cspan\u003eStealth Black, Red, Blue, Orange, Green, Purple, Turquoise\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cstrong\u003eBody Material:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eNylon Composite\u003c\/div\u003e\n\u003cdiv\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cbr\u003e\u003cspan\u003e\u003c\/span\u003e\u003cstrong\u003eINSTRUCTIONS\u003c\/strong\u003e\u003cbr\u003e\u003cspan\u003eInstall with 6mm Hex or 15mm pedal wrench. Torque to 35Nm (25 ft-lbs) Min\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u
003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {43938300002530 : "continue",43938299805922 : "continue",43938299838690 : "continue",43938299871458 : "continue",43938299904226 : "continue",43938299936994 : "continue",43938299969762 : "continue",}; window._RestockRocketConfig.variantsInventoryQuantity = {43938300002530 : parseInt("-2"),43938299805922 : parseInt("0"),43938299838690 : parseInt("0"),43938299871458 : parseInt("0"),43938299904226 : parseInt("0"),43938299936994 : parseInt("0"),43938299969762 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {43938300002530 : parseInt(""),43938299805922 : parseInt(""),43938299838690 : parseInt(""),43938299871458 : parseInt(""),43938299904226 : parseInt(""),43938299936994 : parseInt(""),43938299969762 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {43938300002530 : null,43938299805922 : null,43938299838690 : null,439382 99871458 : null,43938299904226 : null,43938299936994 : null,43938299969762 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {43938300002530 : parseInt(""),43938299805922 : parseInt(""),43938299838690 : parseInt(""),43938299871458 : parseInt(""),43938299904226 : parseInt(""),43938299936994 : parseInt(""),43938299969762 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {43938300002530 : null,43938299805922 : null,43938299838690 : null,43938299871458 : null,43938299904226 : null,43938299936994 : null,43938299969762 : null,}; window._RestockRocketConfig.variantsShippingText = {43938300002530 : "",43938299805922 : "",43938299838690 : "",43938299871458 : "",43938299904226 : "",43938299936994 : "",43938299969762 : "",}; window._RestockRocketConfig.variantsShippingTextForMarket = {43938300002530 : null,43938299805922 : null,43938299838690 : null,43938299871458 : null,43938299904226 : null,43938299936994 : null,43938299969762 : null,}; window._Restock
RocketConfig.selected_variant_id = 43938299838690; window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;// STOQ-1595/1612 shared signal, derived once here so both the accelerated-checkout block // gate (STOQ-1612) and the click tracker (STOQ-1595) read one clearly-owned flag rather // than a side effect buried in either consumer's try/catch: whether this shop has preorders // configured at all — an enabled selling plan plus 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.cachedPreorderVariantI ds.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 variant (never block a plain product's Shop Pay); featured: integration // enabled for this page type. Rationale: PR #2784. try { var _sqc = window._RestockRocketConfig; var _sqOn = !!(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout); var _sqPre = (_sqc.cachedPreorderVariantIds && _sqc.cachedPreorderVariantIds.preorder_variant_ids) || []; var _sqArm = false; if (_sqOn && _sqc.preordersConfigured) { if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) { _sqArm = _sqc.product.variants.some(function (v) { return _sqPre.indexOf(Number(v.id)) !== -1; }); } else { _sqArm = (_sqc.integrations || []).some(function (i) { return i && i.type === 'featured_product' && i.enabled && Array.isArray(i.page_types) && i.page_types.indexOf(_sqc.pageType) !== -1; }); } } if (_sqArm && document.documentElement) { _sqc.acceleratedGateArmed = true; document.documentElement.classList.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, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) // Canary override (STOQ-1287): prefer the Render host emitted into the // metafield-cached settings (api_host) when present, mirroring the same // override in assets/js/api.js. cachedSettings is populated above. Falls // back to the build-baked host for shops without the use_render_api_host // toggle (or environments where THEME_EXTENSION_API_HOST is un
set), so the // setting.json + fetchEmbedConfig calls below route to the same host as the // rest of the extension's API traffic instead of staying on the baked host. window._RestockRocketConfig.host = (window._RestockRocketConfig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io' // Deployed extension build number, read from the CDN asset host Shopify generates: // https://cdn.shopify.com/extensions/ <
uuid>/ <handle>- <
version>/assets/... // Trailing digits (e.g. ".../restockrocket-1-521/assets/" -> "521"). Kept numeric to // match ParseStoqData, so funnel app_version lines up with the order-attribution // app_version. Reflects the ACTUAL deployed build. This is the SINGLE source of the // parsed version — preorder.js getAppVersion() reads it back off config rather than // re-parsing, so the regex lives in exactly one place. try { const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; } catch (e) { window._RestockRocketConfig.appVersion = ''; } const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds const LIQUID_CACHE_MAX_AGE = 15 * 60; // 15 minutes in seconds // Calculate Liquid cache freshness once at initialization const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; // Validate timestamp and calculate ca 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
< 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
< = 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
translation data in metafield // Metafield hasn't been backfilled yet - force refresh console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); return null; } // Translations object exists in metafield - cache is valid // If current locale isn't translated, applyTranslations will gracefully use default locale from base fields if (window._RestockRocketConfig.normalizedLocale && !Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) { console.debug('STOQ - locale not explicitly translated, will use default language from cache'); } // Don't return null - continue using cache even for untranslated locales } const updatedAt = new Date(settings.updated_at); if (isNaN(updatedAt.getTime())) { console.debug('STOQ - Invalid updated_at date format in settings'); return null; } const age = Date.now() - updatedAt.getTime(); if (age console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message); }); } if (typeof window.requestIdleCallback === 'function') { window.requestIdleCallback(run, { timeout: 5000 }); } else { setTimeout(run, 0); } })(); // 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-V ersion'] = 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 fetchEmbedConfig(endpoint, apply) { return fetch(
`${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`, { headers: { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' } } ) .then(function(response) { if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`); return response.json(); }) .then(function(data) { try { apply(data); } catch (applyError) { // Apply failures are programming bugs (e.g. response shape changed // server-side and the assignment threw). Surface them as console.error // so they're visible in browser logs, then re-throw to fall through // to the same Liquid-cached fallback as a fetch failure. console.error('STOQ - apply failed for ' + 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 scripts. Race against a 1000ms timeout so a slow // API can't block init indefinitely. If the timeout wins, the in-flight // fetches still complete and update window._RestockRo
cketConfig — the // bundle re-reads sellingPlans/integrations on every interaction, so the // late-arriving values benefit subsequent renders even though the first // paint may use the Liquid-cached values. On any failure the existing // Liquid-loaded values stay in place via fetchEmbedConfig's catch. if (!window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid) { console.debug('STOQ - Liquid cache stale, refreshing selling_plans + integrations'); Promise.race([ Promise.all([ fetchEmbedConfig('selling_plans', function(data) { if (data && Array.isArray(data.plans)) { window._RestockRocketConfig.sellingPlans = data.plans; window._RestockRocketConfig.disabledSellingPlanIds = data.disabled_plan_ids || []; } }), fetchEmbedConfig('integrations', function(data) { if (Array.isArray(data)) { window._RestockRocketConfig.integrations = d ata; } }) ]), 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 on, // an enabled offer exists, or a disabled-but-kept plan id remains (cart sweep // must still strip those). Rationale in the PR. const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans) && window._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; }); const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds) && window._RestockRocketConfig.disabledSellingPlanIds.length > 0; const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds; const collectionScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlCollection : window._RestockRocketConfig.scriptUrlCollectionBis; const productScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlProduct : window._RestockRocketConfig.scriptUrlProductBis; const pageType = window._RestockRocketConfig.pageType; const collectionPageTypes = ['collection', 'index', 'search', 'page']; if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pa geType}_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}`); } // Dispatch custom event when app is loaded // Cart selling plan updates will be triggered by stoq:inventory-data-loaded event const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabled: settings.enable_app, settings: settings, preorderEnabled: settings.preorder_enabled } }); console.de

The OneUp Composite Pedals features a huge (115x105mm) super grippy platform with 10 rear-loading steel pins per side to keep your feet planted on even the roughest of trails. With a weight of only 355g, they won't slow you down on the climbs. Designed from stealth rubber down and shaped with a subtle convex profile to provide you with more grip thanks to the pedals sitting in the natural arch of your foot. The thin leading edge chamfered design gives you maximum clearance to reduce pedal strikes and deflect off trail obstacle.

FEATURES

  • 10 rear loading Steel pins / side, with Nyloc nuts
  • DU plus cartridge bearing axle system
  • Thin leading edge chamfered design to deflect off obstacles
  • Wide platform design for increased stability
  • Contoured shape provides ultimate connected feel

SPECS   

Weight: 355g 
Platform Size: 115x105mm
# of Pins: 10 per side
Axle Material: Black chromoly steel
Height: 18.5mm (13.3 at the leading edge)
Pin to Axle distance: 108mm
Color: Stealth Black, Red, Blue, Orange, Green, Purple, Turquoise
Body Material: Nylon Composite


INSTRUCTIONS
Install with 6mm Hex or 15mm pedal wrench. Torque to 35Nm (25 ft-lbs) Min

Frequently Asked Questions

  • Please get in touch with a member of the team either by phone (01313745324) or email ([email protected]) where on of the team will be more than happy to help.

    ProjektRide Bike Shop Edinburgh

  • If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.

    Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.

    We also have a physical store, if you are local please pop in -

    ProjektRide Bike Shop Edinburgh

    82 Newington Road, EH91QN, Edinburgh.