ProjektRide Bike Shop Edinburgh | Best Bike Shops Edinburgh, Scotland - Road Bikes | Hybrid Bikes | Mountain Bikes | Touring Bikes
Bike Shop Edinburgh - ProjektRide Bicycle Shop
Edinburgh Cycle Shop - ProjektRide Bike Shops Edinburgh
ProjektRide Bicycle Store
Edinburgh's Bicycle Specialists
Bike Shop Edinburgh - Buy Bikes, Servicing and Bicycle Repairs | ProjektRide Bike Shops Edinburgh
Edinburgh Bike Shop - ProjektRide Bike Shop Edinburgh
We Sell Gravel Bikes, Road Bikes, Mountain Bikes, Hybrid Bikes, City Bikes, And More At ProjektRide Bike Shops Edinburgh
Edinburgh Cycle Store
Edinburgh Bicycle Shop
Edinburgh Cycle Store
Edinburgh's Bicycle Specialists
Specialist Bike Shop Edinburgh - ProjektRide
Road Bikes - ProjektRide Bike Shops Edinburgh
Mountain Bikes
Hybrid Bikes
Gravel Bikes
Touring Bikes
Contact ProjektRide Bike Shop Edinburgh | #1 Bike Shops Edinburgh
Bicycle shops racks shops helmets shimano to ride clothing seatposts Edinburgh bicycle bicycle store bikes electric cycle united kingdom bike shop Edinburgh shorts kids independent electric servicing cycle store specialists wheel trail trained ridgeback bikes disc retailer bikes Edinburgh's bicycle bicycle shop transport cannondale to cycling carbon morningside lights hybrid frame hardtail maintenance parts cannondale ebike my bike giant bike shop children mountain bikes women's Edinburgh's hybrid bike pedals e-bikes leith forks shops shop bikes Edinburgh bike shops.
Bike shops bike store cyclocross bike brands hybrid bikes customer service bike servicing bicycles store Edinburgh workshop bike shops bikepacking specialist team specialized bike stores cargo bicycles dedicated frames delivery rides Edinburgh bike shop brakes workshop bike footwear scheme city pumps head handlebars cargo bikes shopping tyres bike hire racing fixed spanner stems cyclescheme cycling Edinburgh bike bmx jackets drop outdoor mountain bike comely bank chain riders grips set service lubricants carry mountain bike sales mechanics components technology Bruntsfield.
Edinburgh criterium mountain bikes fit Edinburgh Slateford spares inspection store puncture suspension affordable shop soul cycles pedal headsets scottish bmx gravel trek bicycle helmets contact Scotland serviced bike jerseys Edinburgh bike cycle shops build e-bike workshop equipment touring bikes fork mountain bike brake headset warranty mtb bicycle gravel tyres hybrid Edinburgh bicycle shop road bikes Edinburgh gear folding hand bikes adventure newington Edinburgh store mudguards cyclists gear wheels series bike shop leisure giant bicycles replacement cooperative cross local hills.
Edinburgh drivetrain bicycle velow Edinburgh kona kit ebike bike shop tubes shopping builds ridge tubeless electric bikes bicycle fitness services merida full supension helmet electric bikes clothing basket Edinburgh cycle store wheel scott road bike mechanics gloves wheels locks spoke cycles mtb drivetrain 2015 Scotland repair ride speed club lothian stores jersey cycle shop biking scottish tandem fitting repairs stockbridge mechanic saddles riding.
TubelessShop by BrandTook my old bike in for a service and it now feels like new. Great communication and great price. Also took the time to chat about future bike options with me. Cannot recommend Projekt Ride enough!
Custom Builds
Calum Thistle
If you are looking for someone helpful and knowledgeable this is the place to go.Juan Borges Designs
Ridgeback
See MoreIain Orr
Services
I dropped my Specialized Vita for new brake pads and a service, the bike was ready for collection the same day and the price was reasonable! Bicycle feels brand new again and works amazing! Many thanks!!
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 = 'index';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_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_q
Genesis
Heather Patersonuantity_label":"Quantity","enable_alerts":true,"sms_allowed":false,"email_allowed":true,"collect_promotion_consent_default":true,"insert_button_after_selector":null,"insert_button_after_selector_type":"afterend","storefront_button_position_type":"float-right","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"This item needs to be purchased separately. Please check out or clear your cart before adding this item.","storefront_error_heading":"Error","default_locale":"en","collection_page_button_text_color":"#FFFFFF","collection_page_button_background_color":"#202223","show_button_if_any_out_of_stock":false,"show_button_if_any_variant_out_of_stock_collection":false,"show_button_on_index":false,"insert_button_after_selector_collection":null,"insert_button_after_selector_index":null,"push_enabled":false,"push_allowed":false,"storefront_form_push_label":"Push","storefront_form_push_description":"Click 'Allow' to be notified via push notification"
Staff are very kind and the price is relatively reasonable, also student can have 10% discount which it great :)d":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 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
William Gui.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');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missi
cales
}
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(scriptUrl) {
const restockRocketScriptElement = document.createElement('script');
restockRocketScriptElement.setAttribute('defer', 'defer');
restockRocketScriptElement.src = scriptUrl;
docume
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/IMG_5210_3b79585f-a51c-413e-90cb-25a2e0a56743_600x.jpg?v=1762355269)">
Grips & Bar-Tape
a class="product__media product__media--featured"
href="/collections/second-hand-bikes/products/genesis-tour-de-fer-10-ex-demo-bike-medium"
title="Genesis Croix De Fer 10 Ex Demo Bike - Medium"
aria-label="Genesis Croix De Fer 10 Ex Demo Bike - Medium"
style="background-image: url(//projektride.co.uk/cdn/shop/files/FDFCFA79-1A88-4006-911A-D4F6ABA62399-min_600x.png?v=1727259386)">
Alphabetically, A-Z
Open cartspan class="visually-hidden">Genesis Croix De Fer 10 Ex Demo Bike - Medium
div class="result__image" data-aspectratio="{{ it.product.image.aspectRatio }}" data-product-image>
a href="{{ it.product.url }}" class="result__image-link" aria-label='{{ it.produ
<
Genesis
Singular
Bike Packing
Enigma
Bags and Transportation
Frog
Phone Holders
Kona
Surly
Projektride's Student bike bundle!
a class="product__media product__media--featured"
href="/collections/second-hand-bikes/products/projektrides-student-bike-bundle-1"
title="Projektride's Student bike bundle!"
aria-label="Projektride's Student bike bundle!"
style="background-image: url(//projektride.co.uk/cdn/shop/files/B1B0CF04-02C0-4099-B685-92962FC479F2_600x.jpg?v=1758108217)">
span class="visually-hidden">Projektride's Student bike bundle!
>
>
div 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)">
>
Projektride's Student bike bundle!
£499.00
Specialized Rockhopper Hardtail Mountain Bike - Small
a class="pr
<
★★★
Insure Your BikeAmflow
Took my old bike in for a service and it now feels like new. Great communication and great price. Also took the time to chat about future bike options with me. Cannot recommend Projekt Ride enough!
Phone Number
Frog
<
Kona
★★★★★
SurlySpecialized Rockhopper Hardtail Mountain Bike - Small
See MoreIf you are unsure about this value please leave it as 0 and we will take care of the estimate
BrotherOpen search bar
£300.00
UTO (ex Eovolt)
<
★★★★★
Brands
Early RiderSpecialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second Hand Upload bike pictures *See More
Singular
Please upload a maximum of 6 images. Each image can be a maximum of 12MB. Please
Open cart
a class="product__media product__media--featured"
href="/collections/second-hand-bikes/products/specialized-turbo-levo-alloy-oasis-black-size-s3-medium"
title="Specialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second Hand"
aria-label="Specialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second Hand"
style="background-image: url(//projektride.co.uk/cdn/shop/files/DSC02285_600x.jpg?v=1764873083)">
compress your imagesHopeEnigmaSecond-Hand Bikesspan class="visually-hidden">Specialized Turbo Levo Alloy Oasis/Black Size S3 2022 - Medium - Second Hand
online before uploading if they are larger than 10B.
>
I dropped my Specialized Vita for new brake pads and a service, the bike was ready for collection the same day and the price was reasonable! Bicycle feels brand new again and works amazing! Many thanks!!
Shop All Second-Hand>
Website by
ProjektRidebled) {
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 - I
lations) {
// 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 se
Second-Hand Bikes<
See More!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) {
// 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[keyDate, old to new
e?.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=${window._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');
initia