Forks
Front Suspension
CartBrakesServices
Brake Rotors
Brake Spares

<Header Image
<

We will require your full name, address and any suitable form of identification such as a passport or a driver's license.

This will be collected in store when you come to collect the bike.
call in advance
  • to ensure we have a suitable bike for you to rent. I need equipment - can I hire this too?
Can I hire a custom-build bike?
please get in touch
. We can do full custom-builds at a higher rental rate. Can I ProjektRide keep my belongings safe whilst I travel with the bike?We are happy to keep your belongings safe, including suitcases etc. whilst you are out in one of our rental bikes.

From what time can I pick up my hire bike?

Enigma

Frog
At what time do I need to return the bike?
Kona
You must return your bike before the shop closes on your return date. Please review our working hours
hereSurly
. Failure to do so in time may result in additional charges. Please see our
Bike Hire Terms & Conditions
for more information. If you are returning your bike on a Sunday, please add a note to your order with your number and your ETA return date so we can arrange your drop off out-of-hours.UTO (ex Eovolt)
Early Rider
See More
img src="//projektride.co.uk/cdn/shop/files/logo_header_2048x2048.png?v=1634060673" alt="" class="logo--footer"> Shop All Second-Hand

Forks 0) { console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else if (liquidCacheAge

1. Choose Bike = LIQUID_CACHE_MAX_AGE) { console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else { console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`); window._RestockRocketConfig.isLiquidCacheFresh = false; } } 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

Choose your preferred bike from our collection of in-house custom-builds and add to your basket. Bikes can also be hired in store.Front SuspensionComplete Brakesage = 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') function applyTranslations(settings) { try { // Skip translation logic entirely if multi-language is not enabled if (!settings || ]; 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; } } // 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

BUY

RIDE CONFIDENT

Rear Suspension

See More

Tubes

YetiStems Ridgeback