Book a Service
Brands
  • Hope
    Enve
  • Headsets<
  • <
    Brake Rotors
  • Brake Spares
  • Bike PackingSeat Posts & Clamps
  • Bags and Transportation Pedals <
  • See MoreBells
  • Brake Spares Rider Care E-bike Batteries and chargers
  • Forks See More
  • WheelsMaintenance
  • See More Cleaners, Degreasers and Lubrication
    Complete WheelsTubelessTubesHelmetsAccessories
  • See More
    Bottles and Cages Contact Us
  • Phone Holders
    Open search barBells
  • Mudguards
    Bike Packing
  • Phone Holders
  • Bells
  • Mountain BikesElectric Bikes

    Shop by Brand
    img src="//projektride.co.uk/cdn/shop/products/12947_2048x2048.jpg?v=1679151823" alt="Ortlieb Frame-Pack RC 6L" class="mfp-zoom-in-cur" id="31694978285794">
    img src="//projektride.co.uk/cdn/shop/products/12948_2048x2048.jpg?v=1679151822" alt="Ortlieb Frame-Pack RC 6L" class="mfp-zoom-in-cur" id="31694978318562"> <
    <
    <
    img src="//projektride.co.uk/cdn/shop/files/voile-straps-32-inch-nylon-buckle-olive-1_2048x2048.jpg?v=1720100831" alt="Voile 32″ Nylon Buckle Strap" class="mfp-zoom-in-cur" id="34187515232482"> ★★★★★<
    Staff are very kind and the price is relatively reasonable, also student can have 10% discount which it great :)Ortlieb Frame-Pack RC 6L
    William Gui
    img src="//projektride.co.uk/cdn/shop/products/6900_98x.jpg?v=1679151822" alt="" class="product-single__thumbnail-img"> )
    Ridgeback Harmony Clear filters (AccessoriesClose filters
    / div class="result__image-img product__media lazyload fade-in" data-bgset="{{ it.product.image.thumb }
    Ortlieb Frame-Pack RC 6L <Ridgeback HarmonyOrtlieb Frame-Pack RC 6L <
    <

    a href="https://www.ortlieb.com/en_us/" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot_2022-07-06_at_22.44.45_360x.png?v=1657143901); width: 170px; padding-top: 32.4%;">

    >

    div class="list-collections__item__image-bg" style="background-image: url( //projektride.co.uk/cdn/shop/files/Screenshot_2022-07-06_at_22.42.37_2048x.png?v=1657143772 );">Logo imagediv class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/C685060D-D458-4A74-86F3-7C3E83F9F362_600x.jpg?v=1758108217)">
    > >

    a href="https://projektride.co.uk/collections/bikes?filter.p.vendor=Kona,KONA,Kona+Bikes,kona" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/KonaLogoOrbitVertBlack_360x.png?v=1672678563); width: 120px; padding-top: 112.5%;">
    >
    Logo imageProjektride's Student bike bundle!
    a href="https://projektride.co.uk/products/vecnum-freequence-suspension-stem-1?_pos=1&_sid=18e478687&_ss=r" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/IMG_0247_360x.png?v=1693300758); width: 120px; padding-top: 100.0%;">
    >
    div class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/IMG_0248_360x.jpg?v=1693300961); width: 120px; padding-top: 57.9%;">
    > a class="pr>
    • Logo image < >
    Logo imagea href="https://projektride.co.uk/search?q=ESI&type=product" class="logo-list__slide-image" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot_2023-10-05_at_10.46.34_360x.png?v=1696499201); width: 120px; padding-top: 67.7%;">>
    <
    QUICK LINKS
    #FeaturedImage--template--15326745166050__section_featured_image_j6KFyd { --overlay-opacity: 0.2; } ge: url(//projektride.co.uk/cdn/shop/files/DSC02308_600x.jpg?v=1764873256)">Contact Us > Blog Track Service Progress> Specialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second HandPrivacy Policy Cookie Policy
    Terms of Service£1,950.00We are now stocking Skarper!
    Transform your bike into a high-performance e-bike in seconds!
    Check them out!SERVICES

    Servicing

    #RichText--template--15326745166050__16358046840677aee9 { background-color: #ffffff; }Workshop Prices

      Cycle to Work
    • Delivery & Returns
    • Edinburgh's Bike Shop
    • Buy, sell and ride in confidence on ProjektRide’s premium bikes, with over 10 years of experience in the Edinburgh Bike shop cycling industry. Our goal is to provide the cycling community with a resource to buy and sell premium, recognized brands of bikes and to support the expansion of our shared passion. We also offer full custom builds and have a comprehensive workshop to keep your bike running sweet. The main brands we offer are Surly, Brothers Cycles, Genesis, Benno, Kona and Singular Bikes.
    • - BUILD IT YOUR WAY -
    • BUY YOUR NEXT BIKEINFORMATION
    • BIKE SERVICING

    #ListCollections--template--15326745166050__collection-list { --overlay-opacity: 0.2; } @media screen and (min-width: 1024px) { #ListCollections--template--15326745166050__collection-list { --grid: repeat(4, minmax(0, 1fr)); } } @media screen and (min-width: 480px) and (max-width: 1023px) { #ListCollections--template--15326745166050__collection-list { --grid: repeat(2, minmax(0, 1fr)); } }Working Hours

    FAQ Building Your Bike From the Box<

    Questions and answers 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)"> ColourInsure Your Bike

    • © 2025,
    • INFORMATION ed":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_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 th Sun: Closed
    1config":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.scriptUrlProduct = 'https://cdn.shopify.com/extensions/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') ocale)) { 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.createElement('div'); restockRocketContainer.id = 'restock-rocket'; document.body.appendChild(restockRocketContainer); } function createRestockRocketScript(scrip
    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 translations:', e); return settings; } } // First try to get settings from metafields with expiry check const cachedSettings = window._RestockRocketConfig.Tel
    1+onse 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 = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.incl <