Mountain Bikes
Kids Bikes

Shop by Brand
Gloria
Header Image>
Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable

built for ultra-distance riding, audaxes and races. The holster has a dedicated 7.0L dry bag that is 100% waterproof and is secured with a Fidlock™ magnetic buckle that's easy to adjust, even whilst wearing gloves. Nylon webbing, Hypalon straps and foam blocks secure the holster around the seat post, keeping the bag securely in place without sway.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eThe holster is a hardshell construction with an X21 technical outer, and includes Hypalon MOLLE system for additional strapping whilst further Hypalon detailing aids durability and prevents scuffs and scratches. Reflective detailing on the dry bag adds visibility during night time riding.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eCapacity - 7L\u003c\/span\u003e\u003cbr\u003e\u003cspan\u003eWeight - 250g\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003e(7L Dry Bag included)\u003c\/span\u003e\u003c\/p\u003e"}; window._RestockRocketConfig.variantsInventoryPo

tensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/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 backfil

(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

SETTINGS_CACHE_DURATION) { console.debug('STOQ - settings changed recently, skipping cache'); return null; } return settings; } catch (error) { console.debug('STOQ - Error checking settings cache:', error); return null; } } function createRestockRocketContainer() { const restockRocketContainer = document.createElement('div'); restockRocketContainer.id = 'restock-rocket'; document.body.appendChild(restockRocketContainer); } function createRestockRocketScript(scriptUrl) { const restockRocketScriptElement = document.createElement('script'); restockRocketScriptElement.setAttribute('defer', 'defer'); restockRocketScriptElement.src = scriptUrl; document.body.appendChild(restockRocketScriptElement); } createRestockRocketContainer() console.debug('STOQ - extension activated') function applyTranslations(settings) { try { // Skip translation logic entirely if multi-language is not enabled if (!settings ||
]; 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-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' }; if (window.Shopify?.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 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._Restock
ipts enabled for ${window._RestockRocketConfig.pageType}`); } // 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) { conso
<
.restock-rocket-preorder-countdown-timer .countdown-label{font-size:11px}}@media (max-width:480px){.restock-rocket-preorder-countdown-timer{padding:12px}.restock-rocket-preorder-countdown-timer .countdown-units{width:100%;gap:10px}.restock-rocket-preorder-countdown-timer .countdown-box{width:100%;min-width:50px;padding:12px 8px;font-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;a
  • 100%)}}
img src="//projektride.co.uk/cdn/shop/files/logo_header_2048x2048.png?v=1634060673" alt="" class="logo--footer"> © 2025,
ProjektRideContact Us.
Blog
Privacy Policy
Cookie PolicyTerms of ServiceRefund policy ServicingWorkshop Prices
Cycle to Work
INFORMATION





Working Hours



Mon - Fri: 09:00 - 18:30
Sat: 9:00 - 16:00

Sun: Closed
0131 374 5324
<
li class="result result--full"> Complete Wheels

Locks

Mudguards
  • Bike PackingBells
  • Lights Maintenance Sun: Closed
img src="//projektride.co.uk/cdn/shop/files/5BRS_HBP_STD_BLK_5D_20Bar_20Pack_20_28Black_29_2048x2048.jpg?v=1727441496" alt="Restrap Bar Bag" class="mfp-zoom-in-cur" id="34728749990114"> Product Details
Cleaners, Degreasers and LubricationThe Adventure Race Aero Bar bag uses our unique laser cut holster design for ultra-distance events, audaxes and races when using aero bars. The holster has a dedicated 7.0L drybag which is front-loaded and easy to take on and off the bike. The dry bag is 100% waterproof and secured with a Fidlock™ magnetic buckle that's easy to adjust, even whilst wearing gloves. Reflective detailing on the dry bag also aids visibility during night time riding.
The holster is a hardshell construction with an X21 technical outer. It also includes laser cut Hypalon loops to make it fully adjustable for different aero bars, whilst its elastic cord allows storage between the bars for smaller items.
SKU - RS_RBB_STD_BLK
Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable
1+