Close

This site has limited support for your browser. We recommend switching to Edge, Chrome, Safari, or Firefox.

HomeCustom Builds
  • < p class="result__title"> {{ it.product.title }}
  • Maintenance
    < p class="result__title">{{ it.item.text }} ProjektRide Merchandise
  • Clothing and Protection
  • div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/DSC02213_600x.jpg?v=1764776233)">
    £300.00
    Header Image
    Specialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second Hand
    > SELL
    RIDE CONFIDENT
    #ProductTemplate--template--15326745395426__main { background: #ffffff; } .shop-pay-terms { --payment-terms-background-color: #ffffff }
  • Projektride's Student bike bundle!

    £425.00 Product Details

    The Restrap Full Frame Bag allows you to easily increase the load out you carry for comfortable bikepacking and touring. The bags come in three sizes, designed to fit most standard frames and geometries.
       Working HoursTwo Aquaguard YKK zips on the drive side of the bag allow easy access to the top and bottom sections of the bag, with internal velcro dividers to separate the compartments. These dividers aid the structure of the bag when fully packed, but also fold away to allow use of the full internal space of the bag if needed. The non-drive-side of the bag contains a document pocket, useful for storing smaller items.

    The bag is made from durable, textured nylon outer and VX21 fabrics, with a wipeable lower section that means the bag is easy to keep clean when riding off-road or in adverse weather. Rubberised strapping provides extra grip to
    the frame and webbing straps, with easy-to-use cam locking buckles, keep the bag sitting securely and free of movement while riding. Mon - Fri: 09:00 - 18:30
    Hand made in our Yorkshire workshop, all bags are finished with the classic Restrap label, made from vegan-friendly PU. Sat: 9:00 - 16:00 Weight - 266g / 320g / 365g (small/medium/large)
    Capacity - 6L / 7.5L / 9L (small/medium/large)
    {"id":8724018364642,"title":"Restrap Full Frame Bag - Medium","handle":"restrap-full-frame-bag-medium","description":"\u003cp class=\"text-muted my-2\" placeholder=\"A short description that will also appear on documents.\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003eThe Restrap Full Frame Bag allows you to easily increase the load out you carry for comfortable bikepacking and touring. The bags come in three sizes, designed to fit most standard frames and geometries.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eTwo Aquaguard YKK zips on the drive side of the bag allow easy access to the top and bottom sections of the bag, with internal velcro dividers to separate the compartments. These dividers aid the structure of the bag when fully packed, but also fold away to allow use of the full internal space of the bag if needed. The non-drive-side of the bag contains a document pocket, useful for storing smaller items.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eThe bag is made from durable, textured nylon outer and VX21 fabrics, with a wipeable lower section that means the bag is easy to keep clean when riding off-road or in adverse weather. Rubberised strapping provides extra grip to the frame and webbing straps, with easy-to-use cam locking buckles, keep the bag sitting securely and free of movement while riding.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eHand made in our Yorkshire workshop, all bags are finished with the classic Restrap label, made from vegan-friendly PU.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eSKU - RS_FFB_MED_BLK\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eWeight - 266g \/ 320g \/ 365g (small\/medium\/large)\u003c\/span\u003e\u003cbr\u003e\u003cspan\u003eCapacity - 6L \/ 7.5L \/ 9L (small\/medium\/large)\u003c\/span\u003e\u003cbr\u003e\u003c\/p\u003e","published_at":"2024-09-27T16:16:58+01:00","created_at":"2024-09-27T16:15:03+01:00","vendor":"Restrap","type":"bag","tags":["Frame bag","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":12999,"price_min":12999,"price_max":12999,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":46007732240610,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Restrap Full Frame Bag - Medium","public_title":null,"options":["Default Title"],"price":12999,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/RS_FFB_MED_BLK_FullFrameBag-Medium.jpg?v=1727450169"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/RS_FFB_MED_BLK_FullFrameBag-Medium.jpg?v=1727450169","options":["Title"],"media":[{"alt":null,"id":34729052242146,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1024,"width":1024,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/RS_FFB_MED_BLK_FullFrameBag-Medium.jpg?v=1727450169"},"aspect_ratio":1.0,"height":1024,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/RS_FFB_MED_BLK_FullFrameBag-Medium.jpg?v=1727450169","width":1024}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp class=\"text-muted my-2\"0131 374 5324 or in adverse weather. Rubberised strapping provides extra grip to the frame and webbing straps, with easy-to-use cam locking buckles, keep the bag sitting securely and free of movement while riding.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eHand made in our Yorkshire workshop, all bags are finished with the classic Restrap label, made from vegan-friendly PU.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eSKU - RS_FFB_MED_BLK\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eWeight - 266g \/ 320g \/ 365g (small\/medium\/large)\u003c\/span\u003e\u003cbr\u003e\u003cspan\u003eCapacity - 6L \/ 7.5L \/ 9L (small\/medium\/large)\u003c\/span\u003e\u003cbr\u003e\u003c\/p\u003e"} []
    Location
    Would you like to add on any equipment?
    Email
    Hire Lazer Compact Helmet
    <a class="product__media product__media--featured" href="/products/kryptolok-standard-u-lock-with-4-foot-kryptoflex-cable-hire" title="Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable" aria-label="Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-03-09at20.04.46_560e2033-8232-4bd3-a423-3ce8c9f11849_600x.png?v=1691610428)"> <span class="visually-hidden">Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable >

    #Product DetailsFeaturedImage--template--15326745395426__1645734801adfd4c07 { --overlay-opacity: 0.2; }

    Take advantage of our Student Bike Bundle!

    What’s included?

      < div class="featured-image__bg bg-pos-center-center" style="background-image: url('//projektride.co.uk/cdn/shop/files/2571D9FF-E9AE-4004-9A55-C7FD4DD999D6_2048x.jpg?v=1640941114');">
    • Kryptonite Keeper Lock
    • Lazer HelmetProjektRide
    • Buy Sell Ride Confident
    • Free Running in service

    The cornerstone of our utility range the Comet combines reliability, comfort and quality in an easy to understand package that is perfect for the first-time buyer. Designed to provide everything you need in a bike, without any unnecessary distractions, the Comet takes the complications out of bike ownership and leaves you free to enjoy the ride.FAQ

    Questions and answers

    The aluminium frame is built to last and enjoys our limited lifetime warranty, while a single chainring and guard make for a clean ride.

    Seven wide-ranging gears can be easily selected using the Shimano Revoshift twist shifter. This setup gives a perfect range for flatter environments and rolling hills and is very easy to use.

    You'll also ride in comfort because we have selected wide tyres, a comfort saddle with pressure relief channel and ergonomically-shaped dual density grips.I'm looking to find out more information about a product, where can I find this?

    Practicality is another area where the Comet really shines, with mounts for mudguards and racks.

    Please get in touch with a member of the team either by phone (

    Looking for a similar bike, but for hillier terrain and with a wider range of gears? Be sure to take a look at the Ridgeback Motion.01313745324

    ) or email (
    [email protected]
    ) where on of the team will be more than happy to help.
    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.
    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
    < 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.createElem

    ent('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 || !settings.multi_language_enabled) { return settings; } if (!settings.translations) { console.debug('STOQ - No translations found, skipping translation'); return settings; } const normalizedLocale = window._RestockRocketConfig.normalizedLocale; const translations = settings.translations; if (!normalizedLocale) {FAQ // No matching locale has translations; drop payload to save memory console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {})); delete settings.translations; return settings; } console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`); const translatedFields = translations[normalizedLocale]; if (translatedFields && 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 translat

    ions:', 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_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=${wiQuestions and answersndow._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 initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); if(settings.enable_app) { const hijackIntegration = wind

    ow._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' && (settings.show_button_on_search || settings.preorder_search_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_page || settings.preorder_page_enable d)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'product') { createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { console.debug(`STOQ - no scripts 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) { 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 <
    • .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:fixe d;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:center;}.restock-rocket-wrapper-inline{width:100%;height:100%;margin-top:20px}.restock-rocket-preorder-description{padding:10px 15px;margin-top:20px;display:flex;flex-direction:column;gap:10px;}.preorder-description-details{margin-bottom:0;display:flex;flex-direction:column;gap:10p