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.
Co-founded by two childhood friends from the heart of the Scottish mountain bike scene, ProjektRide represents our shared passion for riding quality bikes. We stock a range of premium new and second-hand bikes in Edinburgh for all ages and all cycling disciplines. We also have a comprehensive workshop if you are looking to get your bicycle maintained.
Couldn’t have been happier with the experience
We rented two gravel bikes to explore Scotland for nearly three weeks, and I couldn’t have been happier with the experience. The bikes came fully equipped with everything we could possibly need—repair kit, pannier bags, lock, spare tubes, and more. The team was incredibly welcoming and friendly, making the whole process seamless. There’s honestly nothing-
#brick-section--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_4UhPTU .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_4UhPTU .testimonial__heading { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_4UhPTU .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_4UhPTU .testimonial__item__content { color: ; }#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_4UhPTU .testimonial__user .testimonial__subheading { color: ; }
Everything exceeded expectations
negative I could say; everything exceeded expectations. I can wholeheartedly recommend ProjectRide for anyone looking to rent a bike, and their many 5-star reviews are absolutely well deserved.Reply
Matias Hugentobler
Everything exceeded expectations
negative I could say; everything exceeded expectations. I can wholeheartedly recommend ProjectRide for anyone looking to rent a bike, and their many 5-star reviews are absolutely well deserved.Reply
Matias Hugentobler
#brick-section--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_wqjmKr .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_wqjmKr .testimonial__heading { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_wqjmKr .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_wqjmKr .testimonial__item__content { color: ; }#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_wqjmKr .testimonial__user .testimonial__subheading { color: ; }
Absolutely fantastic bike shop
Absolutely fantastic bike shop. Always willing to help you out when you’re having a problem. Bought many bike components from them over the years and every time they go out of their way to fit them! Would recommend wholeheartedly for any biking needs!
Max McMullon
Absolutely fantastic bike shop
Absolutely fantastic bike shop. Always willing to help you out when you’re having a problem. Bought many bike components from them over the years and every time they go out of their way to fit them! Would recommend wholeheartedly for any biking needs!
Max McMullon
#brick-section--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_LMdqgW .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_LMdqgW .testimonial__heading { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_LMdqgW .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_LMdqgW .testimonial__item__content { color: ; }#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_LMdqgW .testimonial__user .testimonial__subheading { color: ; }
Consistently impressed by their advice and quality
I have taken several bikes here for servicing and repairs and been consistently impressed by their friendly and helpful advice, and the quality of their repair works. They seem to give a very honest opinion on whether work is required or not.
Robert Moreton
Consistently impressed by their advice and quality
I have taken several bikes here for servicing and repairs and been consistently impressed by their friendly and helpful advice, and the quality of their repair works. They seem to give a very honest opinion on whether work is required or not.
Robert Moreton
#brick-section--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_PYFahz .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_PYFahz .testimonial__heading { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_PYFahz .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_PYFahz .testimonial__item__content { color: ; }#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_PYFahz .testimonial__user .testimonial__subheading { color: ; }
Saved our holiday
These fantastic guys saved our holiday. We were bike trekking around Scotland, and after 3 days, we had serious brake problems. The oil was coming out of the calliper. I called 2 days before our arrival, and they promised to make some time for us. They fixed the problem very fast and they totally didn't take advantage of our situation. I know the prices very well, because I have done all my maintenance myself for many years, and I was surprised by the low cost. Thanks a lot guys.
Wim Lintermans
Saved our holiday
These fantastic guys saved our holiday. We were bike trekking around Scotland, and after 3 days, we had serious brake problems. The oil was coming out of the calliper. I called 2 days before our arrival, and they promised to make some time for us. They fixed the problem very fast and they totally didn't take advantage of our situation. I know the prices very well, because I have done all my maintenance myself for many years, and I was surprised by the low cost. Thanks a lot guys.
Wim Lintermans
#brick-section--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_RKEXzy .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_RKEXzy .testimonial__heading { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_RKEXzy .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_RKEXzy .testimonial__item__content { color: ; }#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--testimonial_RKEXzy .testimonial__user .testimonial__subheading { color: ; }
Amazing service and quick turnaround
Amazing service and quick turnaround! Dropped my bike off at 6:30pm (closing time) one day and it had been fully serviced and sorted out by the next morning! Top service and reasonable prices. Will come back here for all bike servicing needs in the future no doubt! Guys are incredibly knowledgeable also.
Christian Graham
Amazing service and quick turnaround
Amazing service and quick turnaround! Dropped my bike off at 6:30pm (closing time) one day and it had been fully serviced and sorted out by the next morning! Top service and reasonable prices. Will come back here for all bike servicing needs in the future no doubt! Guys are incredibly knowledgeable also.
Christian Graham
#brick-section--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-0 .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-0 .testimonial__heading { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-0 .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-0 .testimonial__item__content { color: ; }#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-0 .testimonial__user .testimonial__subheading { color: ; }
Great service, good prices
great shop. Traded in my bike for a second hand road bike. Great service, good prices. Would definitely recommend.
Theo Golden
Great service, good prices
great shop. Traded in my bike for a second hand road bike. Great service, good prices. Would definitely recommend.
Theo Golden
#brick-section--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-1 .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-1 .testimonial__heading { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-1 .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-1 .testimonial__item__content { color: ; }#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-1 .testimonial__user .testimonial__subheading { color: ; }
Amazing and honest advice
The two guys that welcomed me were amazing! Very spot on with all their advice and extremely helpful, as well as honest. What more can you ask for from a bike shop? 🤔😜👍
Antonio Iglesias
Amazing and honest advice
The two guys that welcomed me were amazing! Very spot on with all their advice and extremely helpful, as well as honest. What more can you ask for from a bike shop? 🤔😜👍
Antonio Iglesias
#brick-section--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-2 .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-2 .testimonial__heading { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.25); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-2 .testimonial__text { --adjust-body: calc(var(--FONT-ADJUST-BODY) * 1.0); }
#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-2 .testimonial__item__content { color: ; }#Testimonials--template--26482387583359__section_testimonials_KFYenV .testimonial__item--164746834211dcc15b-2 .testimonial__user .testimonial__subheading { color: ; }
Super helpful, affordable, and friendly
These guys are great! Super helpful, affordable, and friendly. They don't talk down to you as a woman which I always appreciate!
Tiki Muir
Super helpful, affordable, and friendly
These guys are great! Super helpful, affordable, and friendly. They don't talk down to you as a woman which I always appreciate!
Tiki Muir
Bikes are hard to come by at the moment. Andy and Dougie at ProjektRide were amazing in sourcing a frame and a build kit, then marrying them up to create a fantastic bike. They were really attentive to sizing and fitting, based on my riding style.
Matt Wilkes
Attentive to sizing and fitting
Bikes are hard to come by at the moment. Andy and Dougie at ProjektRide were amazing in sourcing a frame and a build kit, then marrying them up to create a fantastic bike. They were really attentive to sizing and fitting, based on my riding style.
Glad to have a local bike shop who know what they're doing
Brilliant service. Andy listened to exactly what I needed and very kindly brought both bikes to my house for me to test ride, so helpful. Would definitely recommend.
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.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')
// Fire stoq_initialized once per page load so the funnel pipeline has a definitive
// "our code ran on this page" signal independent of any cusormalizedLocale = 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[key];
if (value !== null && value !== undefined && value !== '') {
settings[key] = value;
}
});
} else {
console.debug('STOQ - No translated fields found for locale:', normalizedL
ocale);
}
delete settings.translations;
return settings;
} catch (e) {
console.debug('STOQ - error applying translations:', e);
return settings;
}
}
// Setup event listener for cart selling plan updates
// This must be called before any scripts are loaded to avoid race conditions
function setupCartSellingPlanUpdater(settings) {
// Setup listener regardless - updateCartSellingPlans has its own guards
// This ensures cleanup happens even when preorders are disabled globally
// Listen for stoq:inventory-data-loaded event dispatched by api.js
window.addEventListener('stoq:inventory-data-loaded', function(event) {
console.debug('STOQ - Inventory data loaded, updating cart selling plans');
if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) {
window._RestockRocket.updateCartSellingPlans()
.then(hasUpdates => {
if (hasUpdates) {
console.debug('STOQ - cart selling plans update
d successfully');
} else {
console.debug('STOQ - no cart selling plan updates needed');
}
})
.catch(error => {
console.error('STOQ - error updating cart selling plans:', error);
});
}
});
}
// 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-Sche
ma-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');
initializeScripts(cachedSettings);
} else {
console.error('STOQ - failed to load settings:', error);
}
})
.catch(function(e) {
console.error(e)
})
}
function fetchEmbedConfig(endpoint, apply) {
return fet