Surly Custom BuildsYeti
Gloves Open cart

UTO (ex Eovolt) Cycle To Work SchemesRidgeback
Clothing Home

a class="product__media product__media--featured" href="/collections/brother-cycles/products/brother-mehteh-complete-build" title="Brother Mehteh Gravel Bike - Complete Shop Stock Build" aria-label="Brother Mehteh Gravel Bike - Complete Shop Stock Build" style="background-image: url(//projektride.co.uk/cdn/shop/files/DSC01755_600x.jpg?v=1761051082)"> >
  >
 
img src="//projektride.co.uk/cdn/shop/products/ftp_f_freewheel_imagessportlinefwbikesgn21040_detail_04_98x.jpg?v=1709550485" alt="" class="product-single__thumbnail-img"> div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/DSC01758_600x.jpg?v=1761051079)">
Services  > Header Image

<
<
<
from £120.00 per day
X-Small - Sold Out
Small - Sold Out
£849.00SR Suntour NVX30, coil spring, preload adjuster, 100 mm QR, 60 mm travel
Brother Cycles 2025 Kepler Frameset a class="product__media product__media--featured" href="/collections/brother-cycles/products/copy-of-brother-cycles-kepler-frameset" title="Brother Cycles 2025 Kepler Frameset" aria-label="Brother Cycles 2025 Kepler Frameset" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2024-03-17at10.30.04_600x.png?v=1710671639)"> Bags and Transportation Brother Cycles 2025 Kepler Frameset
Wheels

  • Delivery & Returns
INFORMATION

t.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","countdown_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":n
Gull,"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'); < ender : 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 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)) {