tion 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
<
"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.sto
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_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_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,"marke ts_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.","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}],"disabled_plan_ids":[7138137214
-butted 6061 Alloy tube blend provides a responsive ride feel, and the impeccable weld quality and attention to detail ensure high standards. Additionally, the internal down tube cable routing keeps the bike clean and easy to service. It features a Shimano 2x10 drivetrain, offering a wide gear range suitable for diverse terrains. The 4S Tiagra also comes ready to ride with mudguards fitted, making it suitable for all seasons.\u003cbr\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003eThe custom full UD carbon fork reduces road buzz and offers precise handling, while the Kinesis Rider Fit Geometry ensures comfortable all-day rides. With four sizes to choose from, finding the perfect bike fit is made simple. Get ready to experience the perfect blend of performance and adventure with the Kinesis 4S Tiagra.\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eFrame\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e— Lightweight double butted 6061 All
oy tube blend that delivers a light and responsive ride feel.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFork\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e— Custom full 'UD carbon' fork keeps weight low and takes out road buzz whilst feeling direct and accurate at all times.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eGroupset\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e— Full Tiagra 4700 20-speed groupset.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eBrakes\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e— Hydraulic Shimano Tiagra disc brakes are brilliantly reliable and handle the stopping duties with minimum effort.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTyres\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e— Maxxis Pursuer in 32c, hitting the sweet spot for grip, cornering and low rolling resistance.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cst
rong\u003eAdditional Info:\u003c\/strong\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eIf ordered online, the 4S bike will be delivered 95% built.\u003c\/li\u003e\n\u003cli\u003eThe rotor will need fitting to front wheel (rotor is boxed between the front wheel and frame, and the lockring is in the spares\/manuals box).\u003c\/li\u003e\n\u003cli\u003eThe front wheel needs fitting.\u003c\/li\u003e\n\u003cli\u003eYou’ll need to align the front brake\u003c\/li\u003e\n\u003cli\u003eHandlebars need fitting to the stem (the stem comes fitted with a positive rise, and all 3x10mm spacers under the stem).\u003c\/li\u003e\n\u003cli\u003eSeatpost needs fitting (saddle attached to post).\u003c\/li\u003e\n\u003cli\u003eThe pedal washers are tied to the crank arms.\u003c\/li\u003e\n\u003cli\u003eThe Kinesis 4S bike has been checked prior to packing, however before your first ride the bike must have a PDI (Pre Delivery Inspection) by an authorised Kinesis Dealer.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003
cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eAlso the 4S bike comes with some spares and manuals in a separate box, in the bike box:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFront rotor lockring (as mentioned above).\u003c\/li\u003e\n\u003cli\u003eWheel reflectors.\u003c\/li\u003e\n\u003cli\u003eFrame reflectors.\u003c\/li\u003e\n\u003cli\u003eQuick Release axle manuals.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ctable class=\"upgtbl\"\u003e\n\u003ctbody\u003e\n\u003ctr class=\"upgtbltrtle upgtblstle\"\u003e\n\u003ctd\u003eFrame Size Seat Tube\u003c\/td\u003e\n\u003ctd\u003eS* (51)\u003c\/td\u003e\n\u003ctd\u003eM (54)\u003c\/td\u003e\n\u003ctd\u003eL (57)\u003c\/td\u003e\n\u003ctd\u003eXL (60)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd colspan=\"8\"\u003e \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eSeat Tube Length C-T\u003c\/td\
8
p'
};
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('SUnited Kingdom (GBP£)
- Open image lightbox 1
- 2 Open image lightbox
- 3
- Open image lightbox 4
- 5 Open image lightbox
- 6
- Close 7 Open image lightbox
- 8
71,713176482175,714631872895],"cached_at":"2026-04-09T09:16:46Z"};
if (cachedData && typeof cachedData === 'object' && cachedData.cached_at) {
// Find the maximum updated_at from all items in old array
const oldPlans = window._RestockRocketConfig.sellingPlans;
const maxUpdatedAt = Array.isArray(oldPlans) && oldPlans.length > 0
? oldPlans.reduce(function(max, plan) {
// Parse dates for proper comparison (handles mixed ISO formats)
if (plan.updated_at) {
const planDate = new Date(plan.updated_at);
const maxDate = max ? new Date(max) : null;
return (!maxDate || (planDate && !isNaN(planDate) && planDate > maxDate)) ? plan.updated_at : max;
}
return max;
}, '')
: null;
// Use cached if old array is empty/has no timestamps, or cached is newer
// Parse dates for comparison to handle format differences (+00:00 vs .000Z)
const ca
chedDate = new Date(cachedData.cached_at);
const maxDate = maxUpdatedAt ? new 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.enabledNotifyMeVari antIds = [];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._RestockRocketConfig.product = {"id":15289117835647,"title":"Kinesis 4S 2x10 Tiagra","handle":"kinesis-4s-1","description":"\u003cp\u003eIntroducing the brand-new Kinesis 4S Tiagra, a modern aluminium road bike designed for those who seek a balance between speed and adventur
e. We've taken our acclaimed Kinesis R1 and worked hard to improve every detail to improve every ride.\u003cbr\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003eThe 4S Tiagra is built around the same proven frame and fork as our highly praised, group test-winning R1 bike which Cycling Plus magazine proclaimed had \"Understated class and excellent ride quality\" and BikeRadar.com said had “instant zing when pressing the pedals\". The lightweight double-butted 6061 Alloy tube blend provides a responsive ride feel, and the impeccable weld quality and attention to detail ensure high standards. Additionally, the internal down tube cable routing keeps the bike clean and easy to service. It features a Shimano 2x10 drivetrain, offering a wide gear range suitable for diverse terrains. The 4S Tiagra also comes ready to ride with mudguards fitted, making it suitable for all seasons.\u003cbr\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003eThe custom full UD carbon fork reduces road buzz and offers precise handling, whia positive rise, and all 3x10mm spacers under the stem).\u003c\/li\u003e\n\u003cli\u003eSeatpost needs fitting (saddle attached to post).\u003c\/li\u003e\n\u003cli\u003eThe pedal washers are tied to the crank arms.\u003c\/li\u003e\n\u003cli\u003eThe Kinesis 4S bike has been checked prior to packing, however before your first ride the bike must have a PDI (Pre Delivery Inspection) by an authorised Kinesis Dealer.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eAlso the 4S bike comes with some spares and manuals in a separate box, in the bike box:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eFront rotor lockring (as mentioned above).\u003c\/li\u003e\n\u003cli\u003eWheel reflectors.\u003c\/li\u003e\n\u003cli\u003eFrame reflectors.\u003c\/li\u003e\n\u003cli\u003eQuick Release axle manuals.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ctable class=\"upgtbl\"\u003e\n\u003ctbody\u003e\n\u
003ctr class=\"upgtbltrtle upgtblstle\"\u003e\n\u003ctd\u003eFrame Size Seat Tube\u003c\/td\u003e\n\u003ctd\u003eS* (51)\u003c\/td\u003e\n\u003ctd\u003eM (54)\u003c\/td\u003e\n\u003ctd\u003eL (57)\u003c\/td\u003e\n\u003ctd\u003eXL (60)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd colspan=\"8\"\u003e \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eSeat Tube Length C-T\u003c\/td\u003e\n\u003ctd\u003e490\u003c\/td\u003e\n\u003ctd\u003e540\u003c\/td\u003e\n\u003ctd\u003e570\u003c\/td\u003e\n\u003ctd\u003e600\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eTop Tube Length Effective\u003c\/td\u003e\n\u003ctd\u003e532\u003c\/td\u003e\n\u003ctd\u003e545\u003c\/td\u003e\n\u003ctd\u003e561\u003c\/td\u003e\n\u003ctd\u003e580\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eHead Length\u003c\/td\u003e\n\u003ctd\u003e130\u003c\/td\u003e\n\u003ctd\u003e146\u003c\/td\u003e\n\u003ctd\u003e172\u003c\/td\u003e\n\u003ctd\u003e204\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eHead Tube Angle\u003c\/td\u003e\n\u003ctd\u003e71\u003c\/td\u003e\n\u003ctd\u003e72\u003c\/td\u003e\n\u003ctd\u003e72\u003c\/td\u003e\n\u003ctd\u003e72\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eSeat Tube Angle\u003c\/td\u003e\n\u003ctd\u003e74\u003c\/td\u003e\n\u003ctd\u003e74\u003c\/td\u003e\n\u003ctd\u003e74\u003c\/td\u003e\n\u003ctd\u003e74\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eBottom Bracket Drop\u003c\/td\u003e\n\u003ctd\u003e70\u003c\/td\u003e\n\u003ctd\u003e70\u003c\/td\u003e\n\u003ctd\u003e70\u003c\/td\u003e\n\u003ctd\u003e70\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eChain Stay Length\u003c\/td\u003e\n\u003ctd\u003e420\u003c\/td\u003e\n\u003ctd\u003e420\u003c\/td\u003e\n
\u003ctd\u003e420\u003c\/td\u003e\n\u003ctd\u003e420\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eFront Centre\u003c\/td\u003e\n\u003ctd\u003e590.7\u003c\/td\u003e\n\u003ctd\u003e595\u003c\/td\u003e\n\u003ctd\u003e611.8\u003c\/td\u003e\n\u003ctd\u003e631.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eWheelbase\u003c\/td\u003e\n\u003ctd\u003e1001\u003c\/td\u003e\n\u003ctd\u003e1005\u003c\/td\u003e\n\u003ctd\u003e1022\u003c\/td\u003e\n\u003ctd\u003e1042\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eStack\u003c\/td\u003e\n\u003ctd\u003e538\u003c\/td\u003e\n\u003ctd\u003e557\u003c\/td\u003e\n\u003ctd\u003e582\u003c\/td\u003e\n\u003ctd\u003e612\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eReach\u003c\/td\u003e\n\u003ctd\u003e378\u003c\/td\u003e\n\u003ctd\u003e385\u003c\/td\u003e\n\u003ctd\u003e394\u003c\/td\u003e
u003e\n\u003ctd\u003e490\u003c\/td\u003e\n\u003ctd\u003e540\u003c\/td\u003e\n\u003ctd\u003e570\u003c\/td\u003e\n\u003ctd\u003e600\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eTop Tube Length Effective\u003c\/td\u003e\n\u003ctd\u003e532\u003c\/td\u003e\n\u003ctd\u003e545\u003c\/td\u003e\n\u003ctd\u003e561\u003c\/td\u003e\n\u003ctd\u003e580\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eHead Length\u003c\/td\u003e\n\u003ctd\u003e130\u003c\/td\u003e\n\u003ctd\u003e146\u003c\/td\u003e\n\u003ctd\u003e172\u003c\/td\u003e\n\u003ctd\u003e204\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eHead Tube Angle\u003c\/td\u003e\n\u003ctd\u003e71\u003c\/td\u003e\n\u003ctd\u003e72\u003c\/td\u003e\n\u003ctd\u003e72\u003c\/td\u003e\n\u003ctd\u003e72\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eSeat Tube Angle\u003c\/td\u003e\n\u003
ctd\u003e74\u003c\/td\u003e\n\u003ctd\u003e74\u003c\/td\u003e\n\u003ctd\u003e74\u003c\/td\u003e\n\u003ctd\u003e74\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eBottom Bracket Drop\u003c\/td\u003e\n\u003ctd\u003e70\u003c\/td\u003e\n\u003ctd\u003e70\u003c\/td\u003e\n\u003ctd\u003e70\u003c\/td\u003e\n\u003ctd\u003e70\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eChain Stay Length\u003c\/td\u003e\n\u003ctd\u003e420\u003c\/td\u003e\n\u003ctd\u003e420\u003c\/td\u003e\n\u003ctd\u003e420\u003c\/td\u003e\n\u003ctd\u003e420\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eFront Centre\u003c\/td\u003e\n\u003ctd\u003e590.7\u003c\/td\u003e\n\u003ctd\u003e595\u003c\/td\u003e\n\u003ctd\u003e611.8\u003c\/td\u003e\n\u003ctd\u003e631.8\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eWheelbase\u003c\/td\u003e\n\u003ctd\u003e1001\u003c
\/td\u003e\n\u003ctd\u003e1005\u003c\/td\u003e\n\u003ctd\u003e1022\u003c\/td\u003e\n\u003ctd\u003e1042\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eStack\u003c\/td\u003e\n\u003ctd\u003e538\u003c\/td\u003e\n\u003ctd\u003e557\u003c\/td\u003e\n\u003ctd\u003e582\u003c\/td\u003e\n\u003ctd\u003e612\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eReach\u003c\/td\u003e\n\u003ctd\u003e378\u003c\/td\u003e\n\u003ctd\u003e385\u003c\/td\u003e\n\u003ctd\u003e394\u003c\/td\u003e\n\u003ctd\u003e404\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd class=\"upgtblstle\"\u003eFork Axle to Crown\u003c\/td\u003e\n\u003ctd\u003e378\u003c\/td\u003e\n\u003ctd\u003e378\u003c\/td\u003e\n\u003ctd\u003e378\u003c\/td\u003e\n\u003ctd\u003e378\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr class=\"upgtbltrhl\"\u003e\n\u003ctd class=\"upgtblstle\"\u003eFork Rake\u003c\/td\u003e\n\u003ctd\u003e45\u003c\/td\u003e\n\u003ctd\u003e45\u003c\
Home/td\u003e\n\u003ctd\u003e45\u003c\/td\u003e\n\u003ctd\u003e45\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd colspan=\"8\"\u003e \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {56063296373119 : "deny",56063296405887 : "deny",56063296438655 : "deny",56063296471423 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {56063296373119 : parseInt("8"),56063296405887 : parseInt("8"),56063296438655 : parseInt("8"),56063296471423 : parseInt("8"),};
window._RestockRocketConfig.variantsPreorderCount = {56063296373119 : parseInt(""),56063296405887 : parseInt(""),56063296438655 : parseInt(""),56063296471423 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {56063296373119 : null,56063296405887 : null,56063296438655 : null,56063296471423 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {56063296373119 : parseInt(""),56063296405887 : parseInt(""
| dSettings) : null; if (validCachedSettings) { console.debug('STOQ - using cached settings'); initializeScripts(validCachedSettings); } else { console.debug('STOQ - fetching fresh settings'); const headers = { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' }; if (window.Shopify?.theme?.role === 'main') { headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema_name; headers['X-Shopify-Theme-Schema-Version'] = window.Shopify.theme.schema_version; headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id; } fetch( `${window._RestockRocketConfig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`, { headers } ) .then(function(response) { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(function(setti | Error) { // 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-cachedelling_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 = 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.inte | ? 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_${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.scriptUrlCo
|---|---|
Cockpit
| Ball head | Cube Integrated, Top 1 1/8", Bottom 1 1/2" | 9
|---|---|
| Send | Newmen Advanced 318.0, Carbon, 740mm10 + |
| Stem | Newmen Evolution SL 318.4, 31.8mmQuantity |
| Handlebar tape/Grips | Acid React Pro | Increase Quantity
Wheels
| Wheels | Newmen Evolution XA25, 28/28 Spokes, 15x110mm / 12x148mm, Tubeless Ready |
|---|---|
| Front tire | Add to CartSchwalbe Racing Ray, Super Race, Addix Speed, Kevlar, 2.25£2,500.00 |
| Rear tire | Schwalbe Racing Ralph, Super Race, Addix Speed, Kevlar, 2.25 |
Other parts
| Saddle | Natural Fit Venec Lite WS |
|---|---|
| Seatpost | window.appBlockPlacements ||= []; if (window.klarnaAppBlocksManager) { window.klarnaAppBlocksManager.push({ productVariants: [{"id":45661795647714,"title":"Medium - 46","option1":"Medium - 46","option2":null,"option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"BOMBTRACK BEYOND+ Complete Bike - Medium - 46","public_title":"Medium - 46","options":["Medium - 46"],"price":250000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":45661795680482,"title":"Large - 51","option1":"Large - 51","option2":null,"option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"BOMBTRACK BEYOND+ Complete Bike - Large - 51","public_title":"Large - 51","options":["Large - 51"],"price":275000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":45661809443042,"title":"Extra Large - 56","option1":"Extra Large - 56","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"BOMBTRACK BEYOND+ Complete Bike - Extra Large - 56","public_title":"Extra Large - 56","options":["Extra Large - 56"],"price":250000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}], templateName: 'product', dataKey: 'top-strip-promotion-badge', storefrontCurrency: 'GBP', storefrontCountry: 'GB', storefrontLanguage: 'en', shopLocale: 'en', shopDomain: 'projektride.co.uk', variantPrice: '250000', cartPrice: '0', selector: 'shopify-osm-AZVZWMXA0Y041VmdBL__klarna_on_site_messaging_app_block_8gNReH', topPadding: '0', bottomPadding: '30', }); } else { window.appBlockPlacements.push({ productVariants: [{"id":45661795647714,"title":"Medium - 46","option1":"Medium - 46","option2":null,"option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"BOMBTRACK BEYOND+ Complete Bike - Medium - 46","public_title":"Medium - 46","options":["Medium - 46"],"price":250000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":45661795680482,"title":"Large - 51","option1":"Large - 51","option2":null,"option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"BOMBTRACK BEYOND+ Complete Bike - Large - 51","public_title":"Large - 51","options":["Large - 51"],"price":275000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":45661809443042,"title":"Extra Large - 56","option1":"Extra Large - 56","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"BOMBTRACK BEYOND+ Complete Bike - Extra Large - 56","public_title":"Extra Large - 56","options":["Extra Large - 56"],"price":250000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}], templateName: 'product', shopLocale: 'en', dataKey: 'top-strip-promotion-badge', storefrontCurrency: 'GBP', storefrontCountry: 'GB', storefrontLanguage: 'en', shopDomain: 'projektride.co.uk', variantPrice: '250000Newmen Advanced Custom, Carbon, 27.2mm |
| Seatpost clamp | ', cartPrice: '0', selector: 'shopify-osm-AZVZWMXA0Y041VmdBL__klarna_on_site_messaging_app_block_8gNReH', topPadding: '0', bottomPadding: '30', }); }Cube Varioclose, 31.8mm |
| PedalsLooking to purchase with a cycle to work scheme? | Supplied without pedals / Supplied without pedals | Click here
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

Custom Builds for sale580
72Workshop Prices
Luxembourg (EUR€)
Mayotte (EUR€)
Stems

378
Botswana (BWPP)
378
45
Rear Suspension
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_descrip
onPageTypes = ['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}`);
}
// 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._RestockR
Vatican City (EUR€)


Western Sahara (MADد.م.)
Zambia (GBP£)
