Sun: Closed
Wheels
Complete Wheels
Tel
BLUE
0131 374 5324
Open navigation menu
Essentials
Location
Open search barCyan
82 Newington Road
Edinburgh
EH9 1QN
Open navigation menuAccessories
Bottles and Cages
Email
Open cart Locks[email protected]
Home Mudguards
HireBike Packing
Bikes
Bags and Transportation
© 2025,
ProjektRide
Phone Holders.
Website by New Bikes BellsJuan Borges Designs
.Shop All New Bikes
Lights
Road / Gravel / Touring Bikes
Rider Care
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,"enHybrid / City Bikes
torefront_form_email_label":"Email","storefront_form_phone_error":"Please enter a valid phone number","storefront_form_customer_name_placeholder":"Name","storefront_form_customer_name_error":"Please enter your name","storefront_form_did_you_mean_error":"Did you mean %{suggested_email}? Or use %{current_email}","form_customer_name_enabled":false,"form_customer_name_required":false,"css_config":"","js_config":null,"collect_promotion_consent":false,"storefront_form_promotion_consent_label":"Notify me about other news, sales, discounts & offers too","show_button_on_collection":false,"sms_default_country":"us","sms_restrict_country":false,"sms_default_channel":true,"optin_required":false,"optin_success_text":"Registration confirmed! You'll receive an alert when the product is restocked.","storefront_button_border_radius":0,"storefront_button_disable_tag_hides_button":true,"storefront_button_disable_tag_enabled":false,"quantity_required":false,"storefront_form_quantity_label":"Quantity","enable_alerts":true,"sms_al
ease review notification settings and try again","storefront_font_family":"OpenSans","insert_button_after_selector_collection_type":"afterend","show_channel_selector":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send notification to your browser","insert_button_after_selector_page":null,"show_button_on_page":false,"insert_button_after_selector_search":null,"show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":"","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_link_visibility":true,"collection_buttons_container":null,"index_buttons_container":null,"page_buttons_container":null,"search_buttons_container":null,"extension_enable_url_variant_detection":true,"extension_enable_value_variant_detection":true,"extension_value_variant_selector":"[name='id']","resubscribe_text":"This product is out of stock. Get notified when it's restocked again b
]},{"id":45663035982050,"title":"Magenta","option1":"Magenta","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Voile 32″ Nylon Buckle Strap - Magenta","public_title":"Magenta","options":["Magenta"],"price":1500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45663036014818,"title":"OLIVE","option1":"OLIVE","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Voile 32″ Nylon Buckle Strap - OLIVE","public_title":"OLIVE","options":["OLIVE"],"price":1500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":45663036047586,"title":"ORANGE","option1":"ORANGE","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":tru
g_plan":false,"selling_plan_allocations":[]},{"id":45663036145890,"title":"YELLOW","option1":"YELLOW","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Voile 32″ Nylon Buckle Strap - YELLOW","public_title":"YELLOW","options":["YELLOW"],"price":1500,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-black-1.jpg?v=1720100831","\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-blackgrey-1-1024x1024.jpg?v=1720100830","\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-blue-1.jpg?v=1720100831","\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-cyan-white-1-1024x1024.jpg?v=1720100830","\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-green-1.jpg?v=1720100831","\/\/p
Framesop\/files\/voile-straps-32-inch-nylon-buckle-black-1.jpg?v=1720100831"},"aspect_ratio":1.0,"height":1999,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-black-1.jpg?v=1720100831","width":1999},{"alt":null,"id":34187515035874,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1024,"width":1024,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-blackgrey-1-1024x1024.jpg?v=1720100830"},"aspect_ratio":1.0,"height":1024,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-blackgrey-1-1024x1024.jpg?v=1720100830","width":1024},{"alt":null,"id":34187515068642,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1999,"width":1999,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-blue-1.jpg?v=1720100831"},"aspect_ratio":1.0,"height":1999,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-bluTools & Maintenance
inch-nylon-buckle-grey-1.jpg?v=1720100831"},"aspect_ratio":1.0,"height":1999,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-grey-1.jpg?v=1720100831","width":1999},{"alt":null,"id":34187515199714,"position":7,"preview_image":{"aspect_ratio":1.0,"height":1024,"width":1024,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-magenta-white-1-1024x1024.jpg?v=1720100830"},"aspect_ratio":1.0,"height":1024,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-magenta-white-1-1024x1024.jpg?v=1720100830","width":1024},{"alt":null,"id":34187515232482,"position":8,"preview_image":{"aspect_ratio":1.0,"height":1999,"width":1999,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-olive-1.jpg?v=1720100831"},"aspect_ratio":1.0,"height":1999,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-olive-1.jpg?v=172010083
t_ratio":1.0,"height":1999,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-tan-1.jpg?v=1720100831","width":1999},{"alt":null,"id":34187515363554,"position":12,"preview_image":{"aspect_ratio":1.0,"height":1999,"width":1999,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-yellow-black-1.jpg?v=1720100831"},"aspect_ratio":1.0,"height":1999,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/voile-straps-32-inch-nylon-buckle-yellow-black-1.jpg?v=1720100831","width":1999}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003e \u003c\/p\u003e\n\u003cdiv class=\"woocommerce-tabs wc-tabs-wrapper\"\u003e\n\u003cdiv class=\"woocommerce-Tabs-panel woocommerce-Tabs-panel--description panel entry-content wc-tab\" id=\"tab-description\" role=\"tabpanel\" aria-labelledby=\"tab-title-description\"\u003e\n\u003cp\u003e\u003cspan\u003ehese Voile Straps® are made of tough stretch polyurethane, with
l:\u003c\/b\u003e UV-Resistant Polyurethane\u003cbr\u003e\u003cb\u003eBuckle:\u003c\/b\u003e Super-Tough® Nylon\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003csection class=\"related products\"\u003e\u003c\/section\u003e\n\u003c!----\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {45663035752674 : "deny",45663035785442 : "deny",45663035818210 : "deny",45663035850978 : "deny",45663035883746 : "deny",45663035916514 : "deny",45663035949282 : "deny",45663035982050 : "deny",45663036014818 : "deny",45663036047586 : "deny",45663036080354 : "deny",45663036113122 : "deny",45663036145890 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {45663035752674 : parseInt("1"),45663035785442 : parseInt("1"),45663035818210 : parseInt("1"),45663035850978 : parseInt("1"),45663035883746 : parseInt("1"),45663035916514 : parseInt("1"),45663035949282 : parseInt("1"),45663035982050 : parseInt("1"),45663036014818 : parseInt("1"),45663036047586 : parseInt("1"),45
035818210 : parseInt(""),45663035850978 : parseInt(""),45663035883746 : parseInt(""),45663035916514 : parseInt(""),45663035949282 : parseInt(""),45663035982050 : parseInt(""),45663036014818 : parseInt(""),45663036047586 : parseInt(""),45663036080354 : parseInt(""),45663036113122 : parseInt(""),45663036145890 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {45663035752674 : null,45663035785442 : null,45663035818210 : null,45663035850978 : null,45663035883746 : null,45663035916514 : null,45663035949282 : null,45663035982050 : null,45663036014818 : null,45663036047586 : null,45663036080354 : null,45663036113122 : null,45663036145890 : null,};
window._RestockRocketConfig.variantsShippingText = {45663035752674 : "",45663035785442 : "",45663035818210 : "",45663035850978 : "",45663035883746 : "",45663035916514 : "",45663035949282 : "",45663035982050 : "",45663036014818 : "",45663036047586 : "",45663036080354 : "",45663036113122 : "",45663036145890 : "",};
window._Restock
Shop by Brandst = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
function checkSettingsExpiry(settings) {
try {
if (!settings || !settings.updated_at) {
console.debug('STOQ - Invalid settings data structure');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.multi_language_enabled) {
if (!settings.translations) {
// Translations enabled but no translation data in metafield
// Metafield hasn't been backfilled yet - force refresh
console.debug('STOQ - multi-language enabled Clothing and Protection
<
Gloria!settings.multi_language_enabled) {
return settings;
}
if (!settings.translProjektRide Merchandise
ey] = value;
}
});
} else {
console.debug('STOQ - No translated fields found for locale:', normalizedLocale);
}
delete settings.translations;
return settings;
} catch (e) {
console.debug('STOQ - error applying translations:', e);
return settings;
}
}
// First try to get settings from metafields with expiry check
const cachedSettings = window._RestockRocketConfig.cachedSettings;
const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null;
if (validCachedSettings) {
console.debug('STOQ - using cached settings');
initializeScripts(validCachedSettings);
} else {
console.debug('STOQ - fetching fresh settings');
const headers = {
'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop,
'ngrok-skip-browser-warning': 'skip'
};
if (window.Shopify?.theme?.role === 'main') {
headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema
zeScripts(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._RestockRocketConfig.pageType === 'index' && (settings.show_button_on_index || settings.preorder_index_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'search' && (setti
Trek
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');
} else {
console.debug('STOQ - no cart selling plan updates needed');
}
})
.catch(error => {
console.error('STOQ - error updating cart selling plans:', error);
});
} else if (attempt Helmets
maxRetries) {
console.debug(`STOQ - API not ready, retry ${attempt}/${maxRetries}`);
setTimeout(() => attemptCartCheck(attempt + 1), retryDelay);
} else {
console.debug('STOQ - API not loaded after max retries, skipping cart selling plan check');
}
}
attemptCartCheck();
}
Amflow
Gloves
.restock-rocket-button,.restock-rocket-button-float{opacity:1!important;border:none!important;cursor:pointer!important;background-image:none!important;box-shadow:none!important;padding:15px 20px;font-size:16px;width:100%;font-family:inherit}@font-face{font-family:OpenSans;font-weight:200;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Light.woff)}@font-face{font-family:OpenSans;font-weight:300;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Regular.woff)}@font-face{font-family:OpenSans;font-weight:600;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-SemiBold.woff)}.restock-rocket-button-container{position:relative;z-index:1;width:100%}.restock-rocket-button-container-float-right{position:fixed;z-index:123123;top:calc(50% - 200px);right:0;transform:rotate(270deg);transform-origin:bottom right}.restock-rocket-button-container-float-left{position:fixed;z-index:123123;top:calc(50% - 200px);left:40px;transform:rotate(90deg);transform-origin:top left}.restock-rocket-button-container-float-left:hover,.restock-rocket-button-container-float-right:hover,.restock-rocket-button-container:hover,.restock-rocket-button-float:hover,.restock-rocket-button:hover{opacity:.8}.restock-rocket-button{min-height:50px;margin-top:10px;margin-bottom:10px}.restock-rocket-button-collection{position:relative;font-size:13px;line-height:1;padding:7px;height:auto;z-index:3}.restock-rocket-wrapper{background-color:rgba(0,0,0,.5);z-index:123123123;width:100%;height:100%;overflow:auto;position:fixed;right:0;top:0;transition-property:all;transition-duration:.3s;display:flex;flex-direction:column;justify-content:cen
margin-top:4px;flex:1 1 100%}.restock-rocket-preorder-badge{font-size:13px;line-height:1;padding:5px 13px 6px;border-radius:40px;height:auto;border:none;width:auto;z-index:2;margin:0;background:0 0}.preorder-badge-collection{position:absolute;top:10px;right:10px}.preorder-badge-product{margin-left:10px}.restock-rocket-price-strike{text-decoration:line-through;color: #666666;}.restock-rocket-discounted-price{margin-left:10px;}.restock-rocket-acknowledgement-checkbox{margin-bottom:12px;display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height: 1.5;}.restock-rocket-acknowledge-checkbox-input{width:18px;height:18px;margin-top:2px;cursor:pointer;flex-shrink:0;accent-color: #0d0d0d;}.restock-rocket-acknowledge-checkbox-label{flex:1;cursor:pointer;}.restock-rocket-preorder-countdown-timer{display:flex;flex-direction:column;align-items:center;padding:16px;margin:8px 0;font-family:inherit;}.restock-rocket-preorder-countdown-timer .countdown-header{font-size:16px;margin-bottom:6px;text-align:center}.restoc
Yetint-size:24px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:10px}}.restock-rocket-toast{position:fixed;cursor:pointer;background:#fff;border:0;min-width:40px;min-height:40px;box-shadow:0 0 15px rgba(0,0,0,.1)!important;z-index:622004;padding:20px 30px;font-family:inherit;font-size:inherit;color:#000;display:flex;justify-content:center;align-items:center}.restock-rocket-toast a{text-decoration:none;font-weight:700;color:#000}.restock-rocket-toast .dismiss{margin-left:15px;z-index:1;font-size:20px;}.restock-rocket-toast-top{top:60px}.restock-rocket-toast-bottom{bottom:75px}.restock-rocket-toast-left,.restock-rocket-toast-right{-webkit-animation:.5s forwards slide;animation:.5s forwards slide}.restock-rocket-toast-left{left:0;transform:translateX(-100%);-webkit-transform:translateX(-100%);border-radius:0 10px 10px 0}.restock-rocket-toast-left.slide-out{-webkit-animation:.5s forwards slide-out-left;animation:.5s forwards slide-out-left}.restock-rocket-toast-right{right:0;transform:translateX(Clothing