Seat Posts & ClampsElectric Bikes
<
u003cdiv class=\"label\"\u003eDiscipline\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003eGravel\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eGender\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003eMens\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eGender\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003eWomens\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eWheel Size\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003e29 inch\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eProduct Type\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003eGravel Bikes\u003c\/div\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv id=\"pnlMainBodyContainer\" class=\"main-body-container\"\u003e\n\u003cdiv id=\"ctl00_ContentPlaceHolder1_pnlResponsive\"\u003e\n\u003cdiv id=\"ctl00_ContentPlaceHolder1_dvMainControlsContainer\" class=\"InnerContainer row\"\u003e\n\u003cdiv class=\"ProductSKU_Bot
Second-Hand Bikes
<
ss=\"ucFooterMainOuter\"\u003e\n\u003cdiv class=\"ucFooterOuter\"\u003e\n\u003cdiv class=\"ucFooterOuterInside\"\u003e\n\u003cdiv id=\"ctl00_Footer1_dvFooterLinkContainer\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"DynamicFooterContainer\"\u003e\n\u003cdiv id=\"ctl00_Footer1_pnlResponsiveFooter\" class=\"container-fluid footer Footer_Accordion\"\u003e\n\u003cdiv class=\"row\"\u003e\n\u003cdiv class=\"col-xs-6 col-sm-6 col-md-3 footerCol\"\u003e\n\u003cdiv class=\"center-block\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!----\u003e","published_at":"2024-08-15T12:13:01+01:00","created_at":"2024-08-15T12:13:18+01:00","vendor":"Genesis","type":"Bicycles","tags":["spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled","Vagabond"],"price":229900,"price_min":229900,"price_max":229900,"available":true,"price_varies":false,"compare_at_price":null,"comOpen cartHelmets
img src="//projektride.co.uk/cdn/shop/files/gn11810_detail_02_2048x2048.jpg?v=1723720376" alt="Genesis Vagabond 10 2024" class="mfp-zoom-in-cur" id="34464626049250">
ium","option2":null,"option3":null,"sku":"GN11910MD","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Genesis Vagabond 20 2024 - Medium","public_title":"Medium","options":["Medium"],"price":229900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45817769558242,"title":"Large","option1":"Large","option2":null,"option3":null,"sku":"GN11910LG","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Genesis Vagabond 20 2024 - Large","public_title":"Large","options":["Large"],"price":229900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45817769591010,"title":"Extra Large","option1":"Extra Large","option2":null,"option3":null,"sku":"GN11910XL","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Genesis Vagabond
Shop All Second-Hand
"},"aspect_ratio":1.503,"height":1198,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_11.jpg?v=1723720399","width":1800},{"alt":null,"id":34464627687650,"position":12,"preview_image":{"aspect_ratio":1.503,"height":1198,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_12.jpg?v=1723720399"},"aspect_ratio":1.503,"height":1198,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_12.jpg?v=1723720399","width":1800},{"alt":null,"id":34464627720418,"position":13,"preview_image":{"aspect_ratio":1.503,"height":1198,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_13.jpg?v=1723720399"},"aspect_ratio":1.503,"height":1198,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_13.jpg?v=1723720399","width":1800},{"alt":null,"id":34464627753186,"position":14,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_de
ium","option2":null,"option3":null,"sku":"GN11910MD","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Genesis Vagabond 20 2024 - Medium","public_title":"Medium","options":["Medium"],"price":229900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45817769558242,"title":"Large","option1":"Large","option2":null,"option3":null,"sku":"GN11910LG","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Genesis Vagabond 20 2024 - Large","public_title":"Large","options":["Large"],"price":229900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45817769591010,"title":"Extra Large","option1":"Extra Large","option2":null,"option3":null,"sku":"GN11910XL","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Genesis Vagabond
Shop All Second-Hand
"},"aspect_ratio":1.503,"height":1198,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_11.jpg?v=1723720399","width":1800},{"alt":null,"id":34464627687650,"position":12,"preview_image":{"aspect_ratio":1.503,"height":1198,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_12.jpg?v=1723720399"},"aspect_ratio":1.503,"height":1198,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_12.jpg?v=1723720399","width":1800},{"alt":null,"id":34464627720418,"position":13,"preview_image":{"aspect_ratio":1.503,"height":1198,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_13.jpg?v=1723720399"},"aspect_ratio":1.503,"height":1198,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_detail_13.jpg?v=1723720399","width":1800},{"alt":null,"id":34464627753186,"position":14,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/gn11910_de
ass=\"label\"\u003eProduct Type\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003eGravel Bikes\u003c\/div\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv id=\"pnlMainBodyContainer\" class=\"main-body-container\"\u003e\n\u003cdiv id=\"ctl00_ContentPlaceHolder1_pnlResponsive\"\u003e\n\u003cdiv id=\"ctl00_ContentPlaceHolder1_dvMainControlsContainer\" class=\"InnerContainer row\"\u003e\n\u003cdiv class=\"ProductSKU_BottomContainer\"\u003e\n\u003cdiv id=\"ctl00_ContentPlaceHolder1_pnlInformation\" class=\"ProductSKU_Information\" data-name=\"Information\"\u003e\n\u003cdiv id=\"ctl00_ContentPlaceHolder1_ctl10_dvTabbedDataContainer\" class=\"TabbedData_Container FillWhiteSpace\" data-uictrl-id=\"16\" data-accordionswitch=\"400\" data-accordionstartopen=\"True\"\u003e\n\u003cdiv class=\"TabbedData_TabItemsContainer\"\u003e\n\u003cdiv class=\"TabbedData_TabBodyContainer Tab_Overview TabbedData_TabBodySelected\" data-index=\"1\"\u003e\n\u003cdiv class=\"TabbedData_SectionContainer\"\u003e\n\u003cdiv\u003e\u003cbr\u
<
c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!----\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {45817769459938 : "deny",45817769492706 : "deny",45817769525474 : "deny",45817769558242 : "deny",45817769591010 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {45817769459938 : parseInt("1"),45817769492706 : parseInt("1"),45817769525474 : parseInt("1"),45817769558242 : parseInt("1"),45817769591010 : parseInt("1"),};
window._RestockRocketConfig.variantsPreorderCount = {45817769459938 : parseInt(""),45817769492706 : parseInt(""),45817769525474 : parseInt(""),45817769558242 : parseInt(""),45817769591010 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {45817769459938 : null,45817769492706 : null,45817769525474 : null,45817769558242 : null,45817769591010 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {45817769459938 : parseInt(""),45817769492706 : parseInt(""),45817769525474 : parse
ClothingCustom Buildsimg src="//projektride.co.uk/cdn/shop/files/gn11810_detail_03_2048x2048.jpg?v=1723720376" alt="Genesis Vagabond 10 2024" class="mfp-zoom-in-cur" id="34464626082018">
ts/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-collection.js'
window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
function checkSettingsExpiry(settings) {
try {
if (!settings || !settings.updated_at) {
console.debug('STOQ - Invalid settings data structure');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.m
tedFields && typeof translatedFields === 'object') {
Object.keys(translatedFields).forEach(function(key) {
const value = translatedFields[key];
if (value !== null && value !== undefined && value !== '') {
settings[key] = value;
}
});
} else {
console.debug('STOQ - No translated fields found for locale:', normalizedLocale);
}
delete settings.translations;
return settings;
} catch (e) {
console.debug('STOQ - error applying translations:', e);
return settings;
}
}
// First try to get settings from metafields with expiry check
const cachedSettings = window._RestockRocketConfig.cachedSettings;
const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null;
if (validCachedSettings) {
console.debug('STOQ - using cached settings');
initializeScripts(validCachedSettings);
} else {
console.debug('STOQ - fetching fresh settings');
const headers = {
'X
ts/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-collection.js'
window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
function checkSettingsExpiry(settings) {
try {
if (!settings || !settings.updated_at) {
console.debug('STOQ - Invalid settings data structure');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.m
tedFields && typeof translatedFields === 'object') {
Object.keys(translatedFields).forEach(function(key) {
const value = translatedFields[key];
if (value !== null && value !== undefined && value !== '') {
settings[key] = value;
}
});
} else {
console.debug('STOQ - No translated fields found for locale:', normalizedLocale);
}
delete settings.translations;
return settings;
} catch (e) {
console.debug('STOQ - error applying translations:', e);
return settings;
}
}
// First try to get settings from metafields with expiry check
const cachedSettings = window._RestockRocketConfig.cachedSettings;
const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null;
if (validCachedSettings) {
console.debug('STOQ - using cached settings');
initializeScripts(validCachedSettings);
} else {
console.debug('STOQ - fetching fresh settings');
const headers = {
'X
xpired cached settings as fallback');
initializeScripts(cachedSettings);
} else {
console.error('STOQ - failed to load settings:', error);
}
})
.catch(function(e) {
console.error(e)
})
}
function initializeScripts(settings) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
if(settings.enable_app) {
const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) {
return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType);
})
if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfi
Custom Build Inspiration
<
Check and update cart selling plans after scripts are loaded
if (settings.preorder_enabled) {
updateCartSellingPlans();
}
// Dispatch custom event when app is loaded
const appLoadedEvent = new CustomEvent('stoq:loaded', {
detail: {
pageType: window._RestockRocketConfig.pageType,
enabled: settings.enable_app,
settings: settings
}
});
console.debug('STOQ - dispatching app loaded event');
window.dispatchEvent(appLoadedEvent);
}
}
function updateCartSellingPlans() {
// Wait for the API to be available with retries
const maxRetries = 10;
const retryDelay = 500;
function attemptCartCheck(attempt = 1) {
if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) {
window._RestockRocket.updateCartSellingPlans()
.then(hasUpdates => {
if (hasUpdates) {
console.debug('STOQ - cart selling plans updated successfully');
} els
img src="//projektride.co.uk/cdn/shop/files/gn11810_detail_04_2048x2048.jpg?v=1723720376" alt="Genesis Vagabond 10 2024" class="mfp-zoom-in-cur" id="34464626114786">
Spend 
<
Essentials<
files/gn13010_detail_08_2048x2048.jpg?v=1723720467" alt="Genesis Tour De Fer 20 2024" class="mfp-zoom-in-cur" id="34464631849186">
Tel
TubelessMudguards
Gloria
{
"@context": "http://schema.org",
"@type": "Organization",
"name": "ProjektRide","sameAs": [
null,
null,
null,
null,
null,
null,
null
],
"url": "https:\/\/projektride.co.uk"
}
Tools & MaintenanceBike Packing
Trek
Bags and TransportationAmflow
EH9 1QNPhone HoldersYeti
BellsRidgeback
[email protected]LightsBrother


window._RestockRocketConfig = window._RestockRocketConfig || {}
// Helper function to normalize locale format from hyphen to underscore (e.g., 'en-US' -> 'en_us')
// This matches the backend's Mobility.normalize_locale behavior
// Returns empty string if locale is empty or invalid (matches original behavior)
function normalizeLocale(locale) {
if (!locale || locale.trim() === '') {
return '';
}
return locale.toString().toLowerCase().replace(/-/g, '_');
}
window._RestockRocketConfig.locale = 'en';
window._RestockRocketConfig.normalizedLocale = normalizeLocale('en');
window._RestockRocketConfig.shop = 'projektride.myshopify.com';
window._RestockRocketConfig.pageType = 'product';window._RestockRocketConfig.marketId = 382140642;window._RestockRocketConfig.countryName = 'United Kingdom';
window._RestockRocketConfig.countryIsoCode = 'GB';window._RestockRocketConfig.cartInventoryQuantity = {};window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_id":38436,"currency":"GBP","created_at":"2025-07-26T09:13:57.337Z","updated_at":"2025-11-11T14:27:02.312Z","enable_app":true,"enable_signup_widget":false,"storefront_button_text":"Notify me when available","storefront_button_text_color":"#FFFFFF","storefront_button_background_color":"#202223","storefront_form_header":"Notify me","storefront_form_description":"Get a notification as soon as this product is back in stock by signing up below!","storefront_form_button_text":"Notify me when available","storefront_form_button_text_color":"#FFFFFF","storefront_form_button_background_color":"#202223","storefront_form_terms":"Promise we won't spam. You'll only receive notifications for this product.","storefront_form_error":"Please enter a valid email address","storefront_form_success":"Thank you! We will notify you when the product is available.","enable_powered_by":true,"show_button_on_preorder":true,"sms_enabled":false,"email_enabled":true,"storefront_button_disable_tag":"rocket-hide","theme_config":{},"storefront_form_email_placeholder":"Email address","storefront_form_phone_placeholder":"SMS","storefront_form_phone_label":"Phone number","storefront_form_email_label":"Email","storefront_form_phone_error":"Please enter a valid phone number","storefront_form_customer_name_placeholder":"Name","storefront_form_customer_name_error":"Please enter your name","storefront_form_d
Clothing and Protection
521013474,43934694998242,43934695031010,43934695620834,43935975440610,43935975473378,43935989399778,43935989432546,43935990284514,43935994118370,43935995625698,43935995855074,43936000835810,43936003195106,43936003227874,43936008012002,43936008044770,43936022757602,43936022790370,43936022823138,43936022855906,43936056115426,43936061030626,43936064930018,43936070631650,43936078037218,43936078069986,43936088195298,43936093470946,43936101138658,43936107266274,43936124076258,43936124109026,43936124141794,43936124174562,43936129941730,43936129974498,43936130007266,43936142393570,43936142426338,43936142459106,43936152060130,43936152092898,43936152125666,43936193118434,43936250429666,43936255803618,43936266682594,43936266715362,43936293978338,43936294011106,43936316424418,43936316457186,43936320880866,43936320913634,43936320946402,43936327041250,43936327074018,43936327106786,43936331661538,43936332349666,43936333103330,43936351224034,43936353714402,43936362889442,43936362922210,43936388153570,43936389333218,439363955My Account
ge_percentage":"100.0","billing_at":"2025-07-26T09:20:38.472Z","billing_after_n_intervals":7,"billing_after_interval_type":"day","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_selling_plan_id":713071886719,"is_default":true,"type":"full","translations":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":






