Building Your Bike From the Box
Cookie Policy
Yeti Cycles ASR T-Series 29" FrameServicing
Workshop PricesComponentsRear Suspension£3,799.00Cycle to Work
Search text field
- > >
- { "@context": "http://schema.org", "@type": "Organization", "name": "ProjektRide","sameAs": [ null, null, null, null, null, null, null ], "url": "https:\/\/projektride.co.uk" }
- console.log("pr-product-page");
- <
- 1,448g (Frame No shock) 1813g (Frame and shock)< <
T3div class="result__image-img product__media lazyload fade-in" data-bgset="{{ it.product.image.thumb }}" data-aspectratio="{{ it.product.image.aspectRatio }}" data-sizes="auto"> {{@if(it.product.badgeText)}}
div class="product__tag{{ it.product.badgeClasses }}">-
span>{{ it.product.badgeText | safe }}
- RockShox SID Ultimate 3P and RockShox SIDLuxe Ultimate>
3P shock with TwistLoc ULT remote lockout> {{/if}}
>
- Fox Transfer SL dropper post> >
- 180mm front and 160mm rear rotorsp class="result__title"> a href="{{ it.product.url }}">{{ it.product.title }}
- 1,552g (Frame No shock) 1830g (Frame and shock)> >
FRAME HIGHLIGHTS>
>- 66.5 - DEGREE head TUBE angle { "@context": "http://schema.org", "@type": "Organization", "name": "ProjektRide","sameAs": [ null, null, null, null, null, null, null ], "url": "https:\/\/projektride.co.uk" }
- 75.5 - DEGREE SEAT TUBE ANGLE #ProductTemplate--template--15326745395426__main { background: #ffffff; } .shop-pay-terms { --payment-terms-background-color: #ffffff }
<
label for="quantity--template--15326745395426__main">Quantity
-
>
- <<
input type="number" name="quantity" id="quantity--template--15326745395426__main" value="1" min="1">
img src="//projektride.co.uk/cdn/shop/files/aerarorackfr_02_2048x2048.jpg?v=1729932311" alt="Aeroe Spider Front Rack" class="mfp-zoom-in-cur" id="34865320788194">
MORE RESPONSIVE, NO TWITCH
Modern XC rewards brilliant passing, which takes brilliant cornering. The ASR’s forward-bias geometry delivers responsive steering and predictable characteristics to slash fast.
Notify me when this product is available:
- <
img src="//projektride.co.uk/cdn/shop/files/aerarorackfr_03_2048x2048.jpg?v=1729932311" alt="Aeroe Spider Front Rack" class="mfp-zoom-in-cur" id="34865320820962">
-
“JUST RIGHT” BB HEIGHT
A bottom-bracket positioned high enough to pedal through rock gardens, but low enough to sit below the axles for rail-like cornering thanks to that coveted, “in bike” feel.
SIZE SPECIFIC STIFFNESS.
FINE-TUNED.
window.appBlockPlacements ||= [];
if (window.klarnaAppBlocksManager) {
window.klarnaAppBlocksManager.push({
productVariants: [{"id":42603337056482,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"SKMRBP","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"SKS RACEBLADE PRO MUDGUARD SET","public_title":null,"options":["Default Title"],"price":5099,"weight":500,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],
templateName: 'product',
dataKey: 'top-strip-promotion-badge',
storefrontCurrency: 'GBP',
storefrontCountry: 'GB',
storefrontLanguage: 'en',
shopLocale: 'en',
shopDomain: 'projektride.co.uk',
variantPrice: '5099',
cartPrice: '0',
selector: 'shopify-osm-ASUorQUNvQS9uckFQO__klarna_on_site_messaging_app_block_8gNReH',
topPadding: '0',
bottomPadding: '0',
});
} else {
window.appBlockPlacements.push({
productVariants: [{"id":42603337056482,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"SKMRBP","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"SKS RACEBLADE PRO MUDGUARD SET","public_title":null,"options":["Default Title"],"price":5099,"weight":500,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],
templateName: 'product',
shopLocale: 'en',
dataKey: 'top-strip-promotion-badge',
storefrontCurrency: 'GBP',
storefrontCountry: 'GB',
storefrontLanguage: 'en',
shopDomain: 'projektride.co.uk',
variantPrice: '5099',
cartPrice: '0',
selector: 'shopify-osm-ASUorQUNvQS9uckFQO__klarna_on_site_messaging_app_block_8gNReH',
topPadding: '0',
bottomPadding: '0',
});
}
Another goal was to engineer each frame for the same ride
characteristics to give every rider the same feel, regardless of size.
Every ASR frame has size-specific carbon schedules tuning at a much more
sensitive level, and accurately matching torsional stiffness and
chassis-flex profiles too. Tedious? Yes. Worth it? Absolutely.Product Details
A LEGACY OF FLEX.Mudguard length, including mud flaps:
< img src="//projektride.co.uk/cdn/shop/files/aerarorackfr_98x.jpg?v=1729932311" alt="" class="product-single__thumbnail-img">The year was 2003 – our flex stay design was a decades ahead approach to XC full suspension. Today, the reincarnated ASR considers the relationships between leverage rate, link size, material properties of the carbon layup and modern short stroke shocks to deliver responsive, efficient, and astonishingly light XC-specific suspension.Front 519mm
Rear 680mmAMPLE TYRE CLEARANCE FOR
MODERN FULL-VOLUME RUBBER.
[]
Clearance for a 2.4 tyre with 30mm internal rims
provides maximum traction and ride quality.
{
"@context": "http://schema.org/",
"@type": "Product",
"name": "SKS RACEBLADE PRO MUDGUARD SET",
"url": "https:\/\/projektride.co.uk\/products\/sks-raceblade-pro-mudguard-set","image": [
"https:\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-03-16at16.45.04_966x.png?v=1647449351"
],"description": "\nPerfect for someone looking for mudguards to fit a road bike that doesn't have any fixing points. The great thing with these is that they only take a couple of minutes to fit so you can remove on sunny days!\nThe ultimate clip-on mudguard set for road bikes. Raceblade set for max. tyre width up to 25mm, Raceblade XL (Please see separately) up to 32mm. The smart, double-hinged quick release fitting system also fits aero forks and is compatible with disc brakes. Mudguards can be perfectly adapted to the radius of the wheel by adjusting the length of the stays. Superlight extra long mud flaps give additional spray protection. Includes adhesive protection kit to avoid damaging the paintwork.\nMudguard length, including mud flaps:\nFront 519mmRear 680mm","sku": "SKMRBP","brand": {
"@type": "Thing",
"name": "ProjektRide"
},"gtin8": "","offers": [{
"@type" : "Offer","sku": "SKMRBP","availability" : "http://schema.org/InStock",
"price" : 50.99,
"priceCurrency" : "GBP",
"url" : "https:\/\/projektride.co.uk\/products\/sks-raceblade-pro-mudguard-set?variant=42603337056482"
}
]
}
| < | < | ||||
| < | |||||
| Life Systems Pocket First Aid Kit - HIRE | Quantity: | 5'10" - 6'3" | 1a class="product__media product__media--featured" href="/products/life-systems-pocket-first-aid-kit-hire" title="Life Systems Pocket First Aid Kit - HIRE" aria-label="Life Systems Pocket First Aid Kit - HIRE" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.22_5c0e6e2d-1913-4fd1-a90d-b486895960b6_600x.png?v=1691610357)"> | ||
| X-LARGE> 1+ | div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.32_9d81277b-124e-4fdc-8a0f-fbfb40a9343d_600x.png?v=1691610357)">Decrease quantity | 6'1" - 6'7"> |
THE REINCARNATED ASR
A LOT Add to cart a class="product__media product__media--featured" href="/products/kryptolok-standard-u-lock-with-4-foot-kryptoflex-cable-hire" title="Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable" aria-label="Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-03-09at20.04.46_560e2033-8232-4bd3-a423-3ce8c9f11849_600x.png?v=1691610428)"> Notify me when this product is available:likespan class="visually-hidden">Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable > NOTHING ELSE>
SPECIFICATION
TURQ Series carbon fibre frame, threaded bottom bracket, configurable cable ports, 148mm x 12mm BOOST dropouts, integrated derailleur hanger and axle. window.appBlockPlacements ||= []; if (window.klarnaAppBlocksManager) { window.klarnaAppBlocksManager.push({ productVariants: [{"id":46081900839138,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"AERARORACKFR","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Aeroe Spider Front Rack","public_title":null,"options":["Default Title"],"price":9499,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}], templateName: 'product', dataKey: 'top-strip-promotion-badge', storefrontCurrency: 'GBP', storefrontCountry: 'GB', storefrontLanguage: 'en', shopLocale: 'en', shopDomain: 'projektride.co.uk', variantPrice: '9499', cartPrice: '0', selector: 'shopify-osm-ASUorQUNvQS9uckFQO__klarna_on_site_messaging_app_block_8gNReH', topPadding: '0', bottomPadding: '0', }); } else {
| div class="featured-image__bg bg-pos-center-center" style="background-image: url('//projektride.co.uk/cdn/shop/files/2571D9FF-E9AE-4004-9A55-C7FD4DD999D6_2048x.jpg?v=1640941114');"> |
ProjektRide

| Contact Us | 574BlogWould you like to add on any equipment? | Track Service Progress600Building Your Bike From the Box | Insure Your Bike623Privacy Policy | Cookie PolicyHire Lazer Compact Helmet653Terms of Service | Refund policy||
| Workshop Prices | 66.5Cycle to Work | Delivery & ReturnsHire Lazer Compact Helmet66.5 | £0.0066.5 | INFORMATIONBlack66.5 | 66.5 | Hire Ortlieb 40L Pannier Bags|
| D Mon - Fri: 09:00 - 18:30 | < Sat: 9:00 - 16:00a class="product__media product__media--featured" href="/products/hire-ortlieb-40l-pannier-bags" title="Hire Ortlieb 40L Pannier Bags" aria-label="Hire Ortlieb 40L Pannier Bags" style="background-image: url(//projektride.co.uk/cdn/shop/files/resize_width_1000_600x.jpg?v=1741085512)">75.5> | 75.5 Tel | Hire Ortlieb 40L Pannier Bags75.5 0131 374 5324 | £0.0075.5 | 75.5 Location | Life Systems Pocket First Aid Kit - HIRE|
| E EH9 1QN | a class="product__media product__media--featured" href="/products/life-systems-pocket-first-aid-kit-hire" title="Life Systems Pocket First Aid Kit - HIRE" aria-label="Life Systems Pocket First Aid Kit - HIRE" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.22_5c0e6e2d-1913-4fd1-a90d-b486895960b6_600x.png?v=1691610357)">||||||
| nt_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_ | ||||||
| 36193118434,43936250429666,43936255803618,43936266682594,43936266715362,43936293978338,43936294011106,43936316424418,43936316457186,43936320880866,43936320913634,43936320946402,43936327041250,43936327074018,43936327106786,43936331661538,43936332349666,43936333103330,43936351224034,43936353714402,43936362889442,43936362922210,43936388153570,43936389333218,43936395526370,43936398508258,43936401522914,43936408568034,43936414400738,43936700727522,43936706101474,43936706134242,43936706167010,43936706199778,43936706232546,43936706265314,43938308587746,43938308653282,43938308718818,43938308751586,43938308784354,43938308817122,43938322612450,43938322645218,43938322677986,43981336051938,43981336084706,43981336117474,43981336150242,43981345587426,43981345620194,43981345652962,43981345685730,43981357580514,43981357613282,43981362462946,43981362495714,43981362528482,43981369016546,43981369049314,43981374914786,43981374947554,43981374980322,43981392904418,43981695844578,43981695877346,43981695910114,43981695942882,4398198 | 975,56399322251647,56565020721535,56565020754303,56565020787071],"updated_at":"2025-12-14T15:35:50Z","market_locations_enabled":false,"market_id":382140642,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2025-12-14T15:55:00Z","shopify_market_id":382140642,"market_locations_enabled":false}; window._RestockRocketConfig.cachedVariantPreorderLimitsMarketKey = "variant_preorder_limits_for_market_382140642";window._RestockRocketConfig.cachedVariantShippingTexts = {"variant_shipping_texts":{},"updated_at":"2025-12-14T16:01:44Z","shopify_market_id":382140642,"market_locations_enabled":false}; window._RestockRocketConfig.cachedVariantShippingTextsMarketKey = "variant_shipping_texts_for_markettity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_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":"#f | wn_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":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_ra long mud flaps give additional spray protection. Includes adhesive protection kit to avoid damaging the paintwork.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMudguard length, including mud flaps:\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eFront 519mm\u003cbr data-mce-fragment=\"1\"\u003eRear 680mm\u003c\/p\u003e","published_at":"2022-03-16T16:49:10+00:00","created_at":"2022-03-16T16:49:08+00:00","vendor":"ProjektRide","type":"","tags":["Mudguards"],"price":5099,"price_min":5099,"price_max":5099,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":42603337056482,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"SKMRBP","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"SKS RACEBLADE PRO MUDGUARD SET","public_title":null,"options":["Default Title"],"price":5099,"weight":500,"compare_at_price":nul | great thing with these is that they only take a couple of minutes to fit so you can remove on sunny days!\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe ultimate clip-on mudguard set for road bikes. Raceblade set for max. tyre width up to 25mm, Raceblade XL (Please see separately) up to 32mm. The smart, double-hinged quick release fitting system also fits aero forks and is compatible with disc brakes. Mudguards can be perfectly adapted to the radius of the wheel by adjusting the length of the stays. Superlight extra long mud flaps give additional spray protection. Includes adhesive protection kit to avoid damaging the paintwork.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eMudguard length, including mud flaps:\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eFront 519mm\u003cbr data-mce-fragment=\"1\"\u003eRear 680mm\u003c\/p\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {42603337056482 : "deny",}; window._RestockRocketConfig.varia/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 missing from cache // This handles the backfill period where DB has translations but metafield doesn't if (setti | onsole.debug('STOQ - Invalid updated_at date format in settings'); return null; } const age = Date.now() - updatedAt.getTime(); if (ageSETTINGS_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; } } // 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?.theming expired cached settings as fallback'); initializeScripts(cachedSettings); } else { console.error('STOQ - failed to load settings:', error); } }) .catch(function(e) { console.error(e) }) } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); if(settings.enable_app) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); }) if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocket | // Check and update cart selling plans after scripts are loaded if (settings.preorder_enabled) { updateCartSellingPlans(); } // Dispatch custom event when app is loaded const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabled: settings.enable_app, settings: settings } }); console.debug('STOQ - dispatching app loaded event'); window.dispatchEvent(appLoadedEvent); } } function updateCartSellingPlans() { // Wait for the API to be available with retries const maxRetries = 10; const retryDelay = 500; function attemptCartCheck(attempt = 1) { if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { window._RestockRocket.updateCartSellingPlans() .then(hasUpdates => { 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 1236<< |
| }@font-face{font-family:OpenSans;font-weight:300;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Regular.woff)}@font-face{font-family:OpenSans;font-weight:600;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-SemiBold.woff)}.restock-rocket-button-container{position:relative;z-index:1;width:100%}.restock-rocket-button-container-float-right{position:fixed;z-index:123123;top:calc(50% - 200px);right:0;transform:rotate(270deg);transform-origin:bottom right}.restock-rocket-button-container-float-left{position:fixed;z-index:123123;top:calc(50% - 200px);left:40px;transform:rotate(90deg);transform-origin:top left}.restock-rocket-button-container-float-left:hover,.restock-rocket-button-container-float-right:hover,.restock-rocket-button-container:hover,.restock-rocket-button-float:hover,.restock-rocket-button:hover{opacity:.8}.restock-rocket-button{min-height:50px;margin-top:10px;margin-bottom:10px}.restock-rocket-button-collection{position:relative;font-size:13px;line-height:1;padding:7px;heig | :#ebebeb;height:25px;line-height:25px;padding:0 15px;border-radius:25px;font-size:0.8rem;flex:0 0 auto}.restock-rocket-payment-input{margin-right:10px;margin-top:-3px;vertical-align:middle;margin-left:0;accent-color:#202223}.restock-rocket-payment-description{margin-top:4px;flex:1 1 100%}.restock-rocket-preorder-badge{font-size:13px;line-height:1;padding:5px 13px 6px;border-radius:40px;height:auto;border:none;width:auto;z-index:2;margin:0;background:0 0}.preorder-badge-collection{position:absolute;top:10px;right:10px}.preorder-badge-product{margin-left:10px}.restock-rocket-price-strike{text-decoration:line-through;color: #666666;}.restock-rocket-discounted-price{margin-left:10px;}.restock-rocket-acknowledgement-checkbox{margin-bottom:12px;display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height: 1.5;}.restock-rocket-acknowledge-checkbox-input{width:18px;height:18px;margin-top:2px;cursor:pointer;flex-shrink:0;accent-color: #0d0d0d;}.restock-rocket-acknowledge-checkbox-label{flex:1;cursor:pointer;}}@media (max-width:480px){.restock-rocket-preorder-countdown-timer{padding:12px}.restock-rocket-preorder-countdown-timer .countdown-units{width:100%;gap:10px}.restock-rocket-preorder-countdown-timer .countdown-box{width:100%;min-width:50px;padding:12px 8px;font-size:24px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:10px}}.restock-rocket-toast{position:fixed;cursor:pointer;background:#fff;border:0;min-width:40px;min-height:40px;box-shadow:0 0 15px rgba(0,0,0,.1)!important;z-index:622004;padding:20px 30px;font-family:inherit;font-size:inherit;color:#000;display:flex;justify-content:center;align-items:center}.restock-rocket-toast a{text-decoration:none;font-weight:700;color:#000}.restock-rocket-toast .dismiss{margin-left:15px;z-index:1;font-size:20px;}.restock-rocket-toast-top{top:60px}.restock-rocket-toast-bottom{bottom:75px}.restock-rocket-toast-left,.restock-rocket-toast-right{-webkit-animation:.5s forwards slide;animation:.5s forwards slide}.restock-rocket-toast-left{left:0;transform: | |||||
| I | STANDOVER | 768 | 768 | 771 | 771 | 776 |
| J | HEAD TUBE LENGTHProjektRide Bike Shop Edinburgh | 82 Newington Road, EH91QN, Edinburgh.92 | 92 Verifying your connection... | 101 | 111.site-footer { --bg: #1f2324; --text: #ffffff; --text-alpha-15: rgba(255, 255, 255, 0.15); --text-alpha-60: rgba(255, 255, 255, 0.6); --text-alpha-85: rgba(255, 255, 255, 0.85); } .footer-content__logo__image { width: 170px; }Your connection needs to be verified before you can proceed | 133 < | div class="h2"> <MWDXVdK9U8WkHbX0e3RdGylvR9BFd5PRK5Q5sIL7IXA6rVK36yMHnUMHMrKN4eJJhFlxOd9Mh2bFkfjH8PyytIS4SYjsuMXRv9kAICrffazAEykqBVsuB.v9TiA0g61ffxNWaQ0lONNYrWZwx9I8KaU18cs0jQvxE84HFagNDeEaKe6sspZmN9AwO4COKRRSQ86vpCPmpMMPbgpKPaJNQcAEWQG0abJxwUVTPjXvoi5J5P2x2O1ozrr8Ei7EJRo0vD6twDb02etBiGT8LobmtJDN_iz1xz0tDAXIC5ldZ3jtgnw9h4AsxXsMr_YSmA6MLTBEF0qGco8_X5z83mKLRDZ23_NoR1zJx.BcuPD7v5DIACsMUHkIeaDDCszJZh4r_Hv15IEWCaexTX8Yv.yEUKROqxnOBFzCNAzwxSNz9iV_by4dvR6HD9ZBi0If6ceI56aAazs39iE8EDCkmBVXgbJr4pGZR4H9huGebVXfnGb2ygpbZ_rU0e3XV7iHqYLvUceTt2kYuz8rNrTmTWWdbVN_rqtxfDX74cS0RkalXqQxtDfYe_RmAnWI0Q2PvI8C4Xeosvagr8ip_tOUIv4P8YbmcTRyIJrv8KqJOiCT2wgkn.9Dk1wbLPq7rh54lulEc8AEC9eHaoeA8N0SnnVBr_Vtq9Yp0A0whiJX_IhkuMAPpH1nI1gp5cq8P30888QqCKBW2lAFfkIBxbOBt9LW3uia3YeQ3kM_G8FeRmmAw_E9J39Ox7WLFoJAHR3daxYVDNvuXoz.si7M3ucmfIuTzCEm_jUZhxzxS.iFEzbwV9U_HEN2SP1atyLKScOVXW504gcQjD5Nb_Tb6WDUq5IUTgQZ0b5zL0LKz1JdkR5kbAx1azvRfs',};var a = document.createElement('script');a.src = '/cdn-cgi/challenge-platform/h/g/orchestrate/chl_page/v1?ray=9adef23d666fe81c';window._cfFORK (AXLE TO CROWN)QUICK LINKS_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash;window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search;if (window.history && window.history.replaceState) {var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash;history.replaceState(null, null,"\/products\/checkmate-slr-8-axs?srsltid=AfmBOorm3nV3vVYOTB8azRy_YYEQAvDT5dTklnFk00UfgeCPNBco0ci6&__cf_chl_rt_tk=8p1mYspKgkOBmBqjMF8g4SaF4cfKxreIBBS.lZa5fsQ-1765728363-1.0.1.1-ZBJCyKHgTWlIf7oFJhKvlKNxSO6MskJqFcSGQszlv7o"+ window._cf_chl_opt.cOgUHash);a.onload = function() {history.replaceState(null, null, ogU);}}document.getElementsByTagName('head')[0].appendChild(a);}()); | 530About Us | Contact Us530Blog | Track Service Progress530Building Your Bike From the Box | Insure Your Bike530Privacy Policy | Cookie Policy530Terms of Service | Refund policy
| LSERVICES | FORK (OFFSET)Servicing | Workshop Prices44Cycle to Work | Delivery & Returns44 | 44 | INFORMATION44 | 44 |
| M Mon - Fri: 09:00 - 18:30 | Sat: 9:00 - 16:00STACK Sun: Closed | 592 | 592Tel | |||
| 762 | 795 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 = 'product';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_quantity_label":"Quantity","enable_alerts":true,"sms_al | lowed":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","storefront_form_push_error":"Permission rejected! Pl ease review notification settings and try again","storefront_font_family":"OpenSans","insert_button_after_selector_collection_type":"afterend","show_channel_selector":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send notification to your browser","insert_button_after_selector_page":null,"show_button_on_page":false,"insert_button_after_selector_search":null,"show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":"","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_link_visibility":true,"collection_buttons_container":null,"index_buttons_container":null,"page_buttons_container":null,"search_buttons_container":null,"extension_enable_url_variant_detection":true,"extension_enable_value_variant_detection":true,"extension_value_variant_selector":"[name='id']","resubscribe_text":"This product is out of stock. Get notified when it's restocked again b|||||
| 2907491554,44052909097186,44052909129954,44140302827746,44140302893282,44140317016290,44155590508770,44155590541538,44155594211554,44155594244322,44155594277090,44155594309858,44155594342626,44155594375394,44155594440930,44155594473698,44155594506466,44195991847138,44195991945442,44329993437410,44329993470178,44329993502946,44329993535714,44329993568482,44957136584930,44957136781538,44957136945378,45068753961186,45068753993954,45069622640866,45069622903010,45069622968546,45069750730978,45069750763746,45353010921698,45353010954466,45353010987234,45353018261730,45353018294498,45353018327266,55569712382335,55569712447871,55569712480639,55569933074815,55570550194559,55570550227327,55604008976767,55638316908927,55638316941695,55638316974463,56220814999935,56220815032703,56270279606655,56270279639423,56270279672191,56314171064703,56314171097471,56398983725439,56398983758207,56398983790975,56399322251647,56565020721535,56565020754303,56565020787071],"updated_at":"2025-12-14T15:35:50Z","market_locations_enabled":falsPe,"market_id":382140642,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2025-12-14T15:55:00Z","shopify_market_id":382140642,"market_locations_enabled":false}; window._RestockRocketConfig.cachedVariantPreorderLimitsMarketKey = "variant_preorder_limits_for_market_382140642";window._RestockRocketConfig.cachedVariantShippingTexts = {"variant_shipping_texts":{},"updated_at":"2025-12-14T16:01:44Z","shopify_market_id":382140642,"market_locations_enabled":false}; window._RestockRocketConfig.cachedVariantShippingTextsMarketKey = "variant_shipping_texts_for_market_382140642";window._RestockRocketConfig.sellingPlans = [{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":71307 | 1886719,"enabled":true,"variant_ids":[55569933140351,55569712382335,55569712415103,55569712480639,55569933173119,55570017616255,55569933074815,55570017550719,55569712447871,55569933107583,55570017583487],"product_variants_source":"custom","name":"Preorder","preorder_button_text":"Preorder","preorder_button_description":"Note: This is a preorder. Items will ship based on the estimated delivery date.","preorder_button_description_background_color":"#ebebeb","preorder_button_description_text_color":"#000000","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_limit":false,"preorder_button_description_quantity_limit_suffix":" units available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_des cription_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_id":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_timer_stVERTICAL FORK TRAVELyle":"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._RestockRocketConfig.product | = {"id":8743101825250,"title":"Aeroe Spider Front Rack","handle":"aeroe-spider-front-rack","description":"\u003cp\u003eThe bike rack mountain bike and E-mountain bike users love the most, the Spider Front Rack was designed off our award winning Spider platform. Carrying more gear, or matching Panniers front and back has never been easier, you'll love the light weight, robust build and ease of use that the Spider is renowned for. The newest addition to our Spider series, this rack is the base layer of your aeroe system up front\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake any eMTB or MTB bike commute or adventure-ready\u003c\/li\u003e\n\u003cli\u003eMix n match your perfect combination - compatible with all aeroe accessories and mounts\u003c\/li\u003e\n\u003cli\u003eThanks to a clever quick-release system, with no in-built bike mounts or axle dropouts required, you can easily move your rack from one rig to another in minutes. There's no need to have multiple racks for mult iple bikes, just swap and go\u003c\/li\u003e\n\u003cli\u003eWeight - Rack alone 517g\u003c\/li\u003e\n\u003cli\u003eAbility to adjust up and down fork to suit preferences\u003c\/li\u003e\n\u003cli\u003eLoad Capacity - 16kgs (35 lbs). Refer to Cradle and Pod for individual weights\u003c\/li\u003e\n\u003cli\u003eThe spider pannier receiver, Spider Cradle and Quick Mount Pod are sold separately as a rack accessory and is fully compatible with the spider front rack\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cul class=\"attributesSpecification\"\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eProduct Type\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003ePannier Racks\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eColour\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003eBlack\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eSize\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003eOne size\u003c\/div\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e","published_at":"2024-10-26T09:46:29+01:00","created_at":"2024-10-26T09:46:29+01:00","vendor":"Aeore","type":"Apparel \u0026 Accessories","tags":["Front Rack","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":9499,"price_min":9499,"price_max":9499,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":46081900839138,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"AERARORACKFR","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Aeroe Spider Front Rack","public_title":null,"options":["Default Title"],"price":9499,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr.jpg?v=1729932311","\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_01.jpg?v=1729932311110","\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_02.jpg?v=1729932311","\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_03.jpg?v=1729932311","\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_04.jpg?v=1729932311","\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_05.jpg?v=1729932311","\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_06.jpg?v=1729932311"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr.jpg?v=1729932311","options":["Title"],"media":[{"alt":null,"id":34865320952034,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr.jpg?v=1729932311"},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr.jpg?v=1729932311","width":1800},{"alt":null,"id":34865320755426,"position":2,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_01.jpg?v=172993231 | 1"},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_01.jpg?v=1729932311","width":1800},{"alt":null,"id":34865320788194,"position":3,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_02.jpg?v=1729932311"},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_02.jpg?v=1729932311","width":1800},{"alt":null,"id":34865320820962,"position":4,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_03.jpg?v=1729932311"},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_03.jpg?v=1729932311","width":1800},{"alt":null,"id":34865320853730,"position":5,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_04.jpg?v=1729932311 "},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_04.jpg?v=1729932311","width":1800},{"alt":null,"id":34865320886498,"position":6,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_05.jpg?v=1729932311"},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_05.jpg?v=1729932311","width":1800},{"alt":null,"id":34865320919266,"position":7,"preview_image":{"aspect_ratio":1.0,"height":1800,"width":1800,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_06.jpg?v=1729932311"},"aspect_ratio":1.0,"height":1800,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/aerarorackfr_06.jpg?v=1729932311","width":1800}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003eThe bike rack mountain bike and E-mountain bike users love the most, the Spider Front Rack was designed off our award winning Spider platform. Carrying more gear, or matching Panniers front and back has never been easier, you'll love the light weight, robust build and ease of use that the Spider is renowned for. The newest addition to our Spider series, this rack is the base layer of your aeroe system up front\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake any eMTB or MTB bike commute or adventure-ready\u003c\/li\u003e\n\u003cli\u003eMix n match your perfect combination - compatible with all aeroe accessories and mounts\u003c\/li\u003e\n\u003cli\u003eThanks to a clever quick-release system, with no in-built bike mounts or axle dropouts required, you can easily move your rack from one rig to another in minutes. There's no need to have multiple racks for multiple bikes, just swap and go\u003c\/li\u003e\n\u003cli\u003eWeight - Rack alone 517g\u003c\/li\u003e\n\u003cli\u003eAbility to adjust up and down fork to suit preferences\u003c\/li\u003e\n\u003cli\u003eLoad Capacity - 16kgs (35 110lbs). Refer to Cradle and Pod for individual weights\u003c\/li\u003e\n\u003cli\u003eThe spider pannier receiver, Spider Cradle and Quick Mount Pod are sold separately as a rack accessory and is fully compatible with the spider front rack\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cul class=\"attributesSpecification\"\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eProduct Type\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003ePannier Racks\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eColour\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003eBlack\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cdiv class=\"label\"\u003eSize\u003c\/div\u003e\n\u003cdiv class=\"value\"\u003eOne size\u003c\/div\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {46081900839138 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {46081900839138 : parseInt("1"),}; window._RestockRocketConfig.variantsPreorderCo | unt = {46081900839138 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {46081900839138 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {46081900839138 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {46081900839138 : null,}; window._RestockRocketConfig.variantsShippingText = {46081900839138 : "",}; window._RestockRocketConfig.variantsShippingTextForMarket = {46081900839138 : null,}; window._RestockRocketConfig.selected_variant_id = 46081900839138; window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;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.c om/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 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 notranslation 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; } const110 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') function applyTranslations(settings) { try { // Skip translation logic entirelyif 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: ${window._RestockRocketConfig.locale})`); const translatedFields = translations[normalizedLocale]; if (translatedFields && typeof translatedFields === 'object') { Object.keys(translatedFields).forEach(func110tion(key) { const value = translatedFields[key]; 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; } } // 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-brows | er-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 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 initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); if(settings.enable_app) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); }) if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'index' && (settings.show_button_on_index || settings.preorder_index_enabled)) {createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'search' && (settings.show_button_on_search || settings.preorder_search_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_page || settings.preorder_page_enabled)) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(window._RestockRocketConfig.pageType === 'product') { createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { console.debug(`STOQ - no scripts enabled for ${window._RestockRocketConfig.pageType}`); } // Check and update cart selling plans after scripts are loaded if (settings.preorder_enabled) { 110 updateCartSellingPlans(); } // Dispatch custom event when app is loaded const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabled: settings.enable_app, settings: settings } }); console.debug('STOQ - dispatching app loaded event'); window.dispatchEvent(appLoadedEvent); } } function updateCartSellingPlans() { // Wait for the API to be available with retries const maxRetries = 10; const retryDelay = 500; function attemptCartCheck(attempt = 1) { if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { window._RestockRocket.updateCartSellingPlans() .then(hasUpdates => { 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 <

