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 BIKE
div class="list-collections__item__image-bg" style="background-image: url( //projektride.co.uk/cdn/shop/files/bike-seat-lineup_2048x.jpg?v=1743968077 );">
>
<
★★★★★
<
Bike Hire
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-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.product.title }}'>
>
div class="list-collections__item__image-bg" style="background-image: url( //projektride.co.uk/cdn/shop/files/880FA937-5BD8-468C-AC7D-F78C0BA269F2_2048x.jpg?v=1640886458 );">Open search bar
>
>
★★★★★
>
Tubes
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!<p class="result__title">
Parts & Components
Would recommend wholeheartedly for any biking needs!<
a href="{{ it.product.url }}">{{ it.product.title }}
Max McMullon>
TubelessShop all
>
div class="product-feature__image-bg product-feature__image-bg--square" style="background-image: url(//projektride.co.uk/cdn/shop/files/F731D4A9-90BD-4DCB-A44F-A97B9E7E3A28_1024x.jpg?v=1678138464);">>
div class="product-feature__image-bg product-feature__image-bg--square" style="background-image: url(//projektride.co.uk/cdn/shop/files/8A5BDC82-CAF8-4A46-9FF4-B5E6847EEDB3_1024x.jpg?v=1749892417);">Product Details>
Skip to contentUsing our state-of-the-art Nano Tech formula, Muc-Off cuts through grime quicker than you can say “OMG!” regardless of the weather or riding conditions. This classic pink Bike Cleaner has incredible cleaning power because it contains revolutionary Nano Technology that breaks down dirt and grime on microscopic levels, while also caring for your bike’s delicate finish. Because we use the finest ingredients and surfactants, our Muc-Off formula is a closely guarded trade secret.
Introducing Stock Builds!#shopify-section-announcement-bar {
background: #f14d38;
color: #ccbebe;
}
We are really excited to be offering these stock Brothers Mehteh, Big Bro, and Gloria Complete bikes that have been assembled right here in Edinburgh!
It’s the most effective cleaner out there, and it doesn’t even need any of those nasty, dangerous acids or chemicals. In fact, our perfectly pink cleaner is *biodegradable, free from acids, CFC’s and solvents, and it’s alkaline based so you can clean away with a guilt-free conscience. It’s safe on all surfaces, and it’s even disc brake rotor and pad friendly.Shop Now!
utton_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":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_i_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true}];window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":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._RestockRocketConfigng 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 lo<
nt.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) {
// 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:
Scripts(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=${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 ha
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
maxRetries) {
console.debug(`STOQ - API not ready, retry ${attempt}/${maxRetries}`);
setTimeout(() => attemptCartCheck(attempt + 1), retryDelay);
} else {
console.debug('STOQ - API not loaded after max retries, skipping cart selling plan check');
}
}
attemptCartCheck();
}