{{ it.product.title }}y_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_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","sear
CHE_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 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
ions = 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:', normalizedLocale);
}
delete settings.translations;
return settings;
} ca
Red SPD-SL Cleats – 0 Degrees of Float
tch (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?.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._RestockR<<
p class="result__title">{{ it.item.text }} 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();
}
.restock-rocket-button,.restock-rocket-button-float{opacity:1!important;border:none!important;cursor:pointer!important;background-image:none!important;box-shadow:none!important;padding:15px 20px;font-size:16px;width:100%;font-family:inherit}@font-face{font-family:OpenSans;font-weight:200;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Light.woff)}@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;height:auto;z-index:3}.restock-rocket-wrapper{background-color:rgba(0,0,0,.5);z-index:123123123;width:100%;height:100%;overflow:auto;position:fixed;right:0;top:0;transition-property:all;transition-duration:.3s;display:flex;flex-direction:column;justify-content:center;}.restock-rocket-wrapper-inline{width:100%;height:100%;margin-top:20px}.restock-rocket-preorder-description{padding:10px 15px;margin-top:20px;display:flex;flex-direction:column;gap:10px;}.preorder-description-detaiection{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;}.restock-rocket-preorder-countdown-timer{display:flex;flex-direction:column;align-items:center;padding:16px;margin:8px 0;font-family:inherit;}.restock-rocket-preorder-countdown-timer .countdown-header{font-size:16px;margin-bottom:6px;text-align:center}.restock-rocket-preorder-countdown-timer .countdown-units{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}.restock-rocket-preorder-countdown-timer .countdown-unit{display:flex;flex-direction:column;align-items:cen{"id":7476735443170,"title":"Shimano SPD SL Road Cleats","handle":"shimano-spd-sl-road-cleats","description":"\u003cmeta charset=\"utf-8\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eA genuine Shimano replacement part, the SPD-SL SH11 Pedal Cleats are compatible with three bolt road shoes and Shimano SPD-SL road pedals. The non-slip rubber base makes times when you're off the bike and walking a little easier and coloured tips indicate when it's time for replacement.\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eYellow SPD-SL Cleats – 6 Degrees of Float\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eYellow SPD-SL cleats are perhaps the most popular among casual fitness cyclists but are used by a wide range of athletes. They're characterized by a six-degree float range (three degrees in each direction), which allows for free movement and low joint stress. The float’s pivot point is in the center of the cleat, allowing the toes to point in a wide range of angles. This large float range also provides more room for error when setting up your cleats. If you're new to cycling, experience knee pain, lack flexibility, or simply don’t know where to start, Shimano’s yellow cleats are your best bet.\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eRed SPD-SL Cleats – 0 Degrees of Float\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eRed SPD-SL cleats have no float and are 100% fixed in position. This makes them great for sprinters, professional athletes, or people who value the most efficient power transfer possible and are not prone to knee pain. Note that red SPD-SL cleats require that you know your optimal cleat position precisely, and you are comfortable adjusting your cleats into that perfect position.\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eBlue SPD-SL Cleats – 2 Degrees of Float\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eBlue SPD-SL cleats are Shimano’s newest cleat option and they exist as a middle-ground between yellow and red. Blue cleats have two degrees of float (one degree in each direction), allowing for a small range of movement while still delivering a high amount of pedaling efficiency. The float pivot point is at the front of the cleat, which eliminates lateral ter;gap:6px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:40px;padding:10px 6px;text-align:center;font-size:20px;line-height:1}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:14px;font-weight:500;text-align:center;text-transform:capitalize;opacity:.7}@media (max-width:768px){.restock-rocket-preorder-countdown-timer{padding:14px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:55px;padding:14px 10px;font-size:26px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:11px}}@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 rgb
sliding movement while allowing a small amount of angle change from the pivot point back towards the heel.\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e","published_at":"2021-12-16T22:30:18+00:00","created_at":"2021-12-16T22:27:48+00:00","vendor":"Shimano","type":"","tags":["Cleats","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":2099,"price_min":2099,"price_max":2099,"available":true,"price_varies":false,"compare_at_price":2099,"compare_at_price_min":2099,"compare_at_price_max":2099,"compare_at_price_varies":false,"variants":[{"id":42167775494370,"title":"Yellow 6 Degrees","option1":"Yellow 6 Degrees","option2":null,"option3":null,"sku":"SMSH11","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Shimano SPD SL Road Cleats - Yellow 6 Degrees","public_title":"Yellow 6 Degrees","options":["Yellow 6 Degrees"],"price":2099,"weight":100,"compare_at_price":2099,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"a(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:translateX(-100%);-webkit-transform:translateX(-100%);border-radius:0 10px 10px 0}.restock-rocket-toast-left.slide-out{-webkit-animation:.5s forwards slide-out-left;animation:.5s forwards slide-out-left}.restock-rocket-toast-right{right:0;transform:translateX(100%);-webkit-transform:translateX(100%);border-radius:10px 0 0 10px}.restock-rocket-toast-right.slide-out{-webkit-animation:.5s forwards slide-out-right;animation:.5s forwards slide-out-right}@keyframes slide{100%{tra
Disc Only. Max 160 mm Rotor Size
Sat: 9:00 - 16:00
Sun: Closed
Braze-ons/extras: Fender eyelets at the dropouts, front and rear rack bosses and dual water bottle mounts. Oh yeah, it sports downtube shifter mounts
Cockpit
Bells
We love custom building these Surlys. Get in touch with the team to find out more about custom building your dream Surly. Please check out some of our custom builds:
most of you get what Straggler is. It's a Cross Check with disc brakes instead of rim brakes. We also think you get why that's good. The Cross Check is a madly versatile bike that can be used for most types of riding and riding surfaces. It can be set up as a hauler or a mauler and so can Straggler. Better still is that you now have the option of 650b wheel size. 650b wheels were popular for a long time many years ago on 'Constructeur' style bicycles and we all know how real shit was back in the day.... 650b wheels strike a nice balance between the benefits of both 26\" and 700c sizes. The smaller wheel allows smaller riders to fit well on smaller frames, produces a stronger wheel, makes fitting big ass tyres easier and are more agile than their larger counterparts.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eStraggler has disc caliper mounts instead of rim brake studs. It'll accept rotors up to 160mm. The rear dropouts are unique, too. They're a partially closed horizontal design that accommodates
singlespeed or geared drivetrains. They feature stop screws that thread in from the rear to further secure the wheel and to position the rear wheel for optimal shifting, plus a forward-mounted stop screw on the drive side to keep the wheel from slipping forward under the force of your gargantuan legs. The rear dropouts are spaced 135mm instead of 132.5mm like the Cross-Check simply because there are far more options for disc hubs in this spacing.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eStraggler shares all of the Cross-Check's braze-ons for fenders, racks and bottle cages. The Straggler's geometry is slightly different, with angles and tube lengths very close but not identical to the Cross-Check, but like the Cross-Check it's ready to take you just about anywhere. It's a day tripper and a weekender. It's a 'rough road' road bike. It's a cyclocross bike with no pretense about racing. It's a utilitarian townie. It's a light-duty touring bike. It's an all-weather commuter. And when you get tyred of
one set up, you can swap parts around and turn it into something else.\u003c\/p\u003e\n\u003ch4 data-mce-fragment=\"1\"\u003eFrameset Specification\u003c\/h4\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eTubing:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e100% Surly proprietary 4130 CroMoly tubing. ED Coated. TIG-welded. Double-butted main triangle\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eRear Dropouts:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eForward-exiting horizontal dropouts with adjusters give you singlespeed compatibility and wheelbase adjustability to help you fit the tyres and fenders you want to run with that drivetrain you want to run. 135mm spacing\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eBrake Compatibility:\u003c\/strong\u003e\u0
03cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eDisc Only. Max 160 mm Rotor Size\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eBraze-ons\/extras: Fender eyelets at the dropouts, front and rear rack bosses and dual water bottle mounts. Oh yeah, it sports downtube shifter mounts\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eSeatpost diameter:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e27.2mm\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eSeatpost clamp diameter:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e30.0mm (we include our Surly stainless clamp with our framesets)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eHeadset\/Steertube:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e1-1\/8\" threadless\u003c\/li\u003e\n\u003cli data-mce-fra
gment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eFront Derailleur Clamp Diameter:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e28.6 mm\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eBottom bracket shell:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e68mm wide, standard English threaded 1.37 x 24t\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eChainring Clearance:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eManipulated so you can fit pretty much whatever size rings you want. Go nuts\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eTyre Clearance:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eOur Fatties Fit Fine (FFF) stays and our beautiful slope-crowned custom fork provide room for tyres up to 650b x 42mm! With f
enders!\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eFork:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e4130 CroMoly, disc only, lugged and brazed. Sloping crown with threaded eylets, tapered and butted curved blades with mid-blade rack eyelets, dual dropout eyelets\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eWeight:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e54cm = 4.74 lb (2.27kg) Fork--uncut = 2.3 lb (1050g)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eWheel sizes:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e650b\/27.5\"\u003c\/li\u003e\n\u003c\/ul\u003e","published_at":"2023-01-02T18:17:48+00:00","created_at":"2023-01-02T18:17:47+00:00","vendor":"Surly","type":"","tags":["bike","bikes","frames","New","surly"],"price":80000,"price_min":80000,"
price_max":80000,"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":43725343817954,"title":"38cm","option1":"38cm","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Surly Straggler Frameset - Chlorine Blue 650b - 38cm","public_title":"38cm","options":["38cm"],"price":80000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43725343850722,"title":"42cm","option1":"42cm","option2":null,"option3":null,"sku":"FMSUGB42L","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Surly Straggler Frameset - Chlorine Blue 650b - 42cm","public_title":"42cm","options":["42cm"],"price":80000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_pl
an_allocations":[]},{"id":43725343883490,"title":"46cm","option1":"46cm","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Surly Straggler Frameset - Chlorine Blue 650b - 46cm","public_title":"46cm","options":["46cm"],"price":80000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43725343916258,"title":"50cm","option1":"50cm","option2":null,"option3":null,"sku":"FMSUGB50L","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Surly Straggler Frameset - Chlorine Blue 650b - 50cm","public_title":"50cm","options":["50cm"],"price":80000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":43725343949026,"title":"52cm","option1":"52cm","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"fView alleatured_image":null,"available":true,"name":"Surly Straggler Frameset - Chlorine Blue 650b - 52cm","public_title":"52cm","options":["52cm"],"price":80000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-01-02at18.16.00.png?v=1672683470","\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-01-02at17.04.36_73798492-8a51-479a-afa6-acfde9b55a5b.png?v=1672683470"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-01-02at18.16.00.png?v=1672683470","options":["Size"],"media":[{"alt":null,"id":31378551603426,"position":1,"preview_image":{"aspect_ratio":1.466,"height":776,"width":1138,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-01-02at18.16.00.png?v=1672683470"},"aspect_ratio":1.466,"height":776,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-01-02at18.16.00.png?v
=1672683470","width":1138},{"alt":null,"id":31378551636194,"position":2,"preview_image":{"aspect_ratio":1.912,"height":594,"width":1136,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-01-02at17.04.36_73798492-8a51-479a-afa6-acfde9b55a5b.png?v=1672683470"},"aspect_ratio":1.912,"height":594,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-01-02at17.04.36_73798492-8a51-479a-afa6-acfde9b55a5b.png?v=1672683470","width":1136}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eWe think by now, most of you get what Straggler is. It's a Cross Check with disc brakes instead of rim brakes. We also think you get why that's good. The Cross Check is a madly versatile bike that can be used for most types of riding and riding surfaces. It can be set up as a hauler or a mauler and so can Straggler. Better still is that you now have the option of 650b wheel size. 650b wheels were popu
lar for a long time many years ago on 'Constructeur' style bicycles and we all know how real shit was back in the day.... 650b wheels strike a nice balance between the benefits of both 26\" and 700c sizes. The smaller wheel allows smaller riders to fit well on smaller frames, produces a stronger wheel, makes fitting big ass tyres easier and are more agile than their larger counterparts.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eStraggler has disc caliper mounts instead of rim brake studs. It'll accept rotors up to 160mm. The rear dropouts are unique, too. They're a partially closed horizontal design that accommodates singlespeed or geared drivetrains. They feature stop screws that thread in from the rear to further secure the wheel and to position the rear wheel for optimal shifting, plus a forward-mounted stop screw on the drive side to keep the wheel from slipping forward under the force of your gargantuan legs. The rear dropouts are spaced 135mm instead of 132.5mm like the Cross-Check simply bec
ause there are far more options for disc hubs in this spacing.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eStraggler shares all of the Cross-Check's braze-ons for fenders, racks and bottle cages. The Straggler's geometry is slightly different, with angles and tube lengths very close but not identical to the Cross-Check, but like the Cross-Check it's ready to take you just about anywhere. It's a day tripper and a weekender. It's a 'rough road' road bike. It's a cyclocross bike with no pretense about racing. It's a utilitarian townie. It's a light-duty touring bike. It's an all-weather commuter. And when you get tyred of one set up, you can swap parts around and turn it into something else.\u003c\/p\u003e\n\u003ch4 data-mce-fragment=\"1\"\u003eFrameset Specification\u003c\/h4\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eTubing:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e100% Surly pro
prietary 4130 CroMoly tubing. ED Coated. TIG-welded. Double-butted main triangle\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eRear Dropouts:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eForward-exiting horizontal dropouts with adjusters give you singlespeed compatibility and wheelbase adjustability to help you fit the tyres and fenders you want to run with that drivetrain you want to run. 135mm spacing\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eBrake Compatibility:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eDisc Only. Max 160 mm Rotor Size\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003eBraze-ons\/extras: Fender eyelets at the dropouts, front and rear rack bosses and dual water bottle mounts. Oh yeah, it sports downtube shifter mounts\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\
"\u003eSeatpost diameter:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e27.2mm\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eSeatpost clamp diameter:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e30.0mm (we include our Surly stainless clamp with our framesets)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eHeadset\/Steertube:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e1-1\/8\" threadless\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eFront Derailleur Clamp Diameter:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e28.6 mm\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eBottom bracket shell:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e68mm wi
de, standard English threaded 1.37 x 24t\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eChainring Clearance:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eManipulated so you can fit pretty much whatever size rings you want. Go nuts\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eTyre Clearance:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eOur Fatties Fit Fine (FFF) stays and our beautiful slope-crowned custom fork provide room for tyres up to 650b x 42mm! With fenders!\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eFork:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e4130 CroMoly, disc only, lugged and brazed. Sloping crown with threaded eylets, tapered and butted curved blades with mid-blade rack eyelets, dual dropout eyelets\u003c\/li\u003e\n\u003cli data-mcLoading moree-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eWeight:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e54cm = 4.74 lb (2.27kg) Fork--uncut = 2.3 lb (1050g)\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\n\u003cstrong data-mce-fragment=\"1\"\u003eWheel sizes:\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e650b\/27.5\"\u003c\/li\u003e\n\u003c\/ul\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {43725343817954 : "deny",43725343850722 : "deny",43725343883490 : "deny",43725343916258 : "deny",43725343949026 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {43725343817954 : parseInt("0"),43725343850722 : parseInt("0"),43725343883490 : parseInt("0"),43725343916258 : parseInt("2"),43725343949026 : parseInt("1"),};
window._RestockRocketConfig.variantsPreorderCount = {43725343817954 : parseInt(""),43725343850722 : parseInt(""),43725343883490 : parseInt(""),43725343916258 : parseInt(""),43725343949026 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {43725343817954 : null,43725343850722 : null,43725343883490 : null,43725343916258 : null,43725343949026 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {43725343817954 : parseInt(""),43725343850722 : parseInt(""),43725343883490 : parseInt(""),43725343916258 : parseInt(""),43725343949026 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {43725343817954 : null,43725343850722 : null,43725343883490 : null,43725343916258 : null,43725343949026 : null,};
window._RestockRocketConfig.variantsShippingText = {43725343817954 : "",43725343850722 : "",43725343883490 : "",43725343916258 : "",43725343949026 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {43725343817954 : null,43725343850722 : null,43725343883490 : null,43725343916258 : null,43725343949026 : null,};
window._RestockRocketConfig.selected_variant_id = 43725343916258;
windo.w._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.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 (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._Re.stockRocketConfig.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 cr
eateRestockRocketScript(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 || !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 trans
lations. 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:', 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?.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.p
ageType === '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) {
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 retry
Delay = 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
<
A cornerstone of our range since 2008, the beauty of the Equilibrium is in its versatility. Reynolds 725 tubing isolates you from broken tarmac and unmade roads, while rack and guard mounts make the Equilibrium your timeless, year-round companion, wherever the road may take you. Equipped with Shimano's workhorse 105 groupset, the latest Equilibrium will accommodate a 32mm tyre to deliver more comfort than ever before - whether you're riding along green lanes, light gravel or cobbles. Proven Equilibrium geometry and practicality combined with a traditional steel frame and confidence-inspiring disc brake performance makes what we believe to be the ideal UK road disc all-rounder
Brake Type :
Hydraulic Disc
Fork Material :
Carbon
Frame Material :
Steel
Bottom Bracket :
Shimano SM-BBR60
Wheel Size :
700c
Brake Levers :
Shimano 105 ST-R7020 11 Speed
Intended Use :
Road
Brakes :
Shimano 105 BR-R7070 Hydraulic Disc
Cassette Freewheel :
Shimano CS-HG700-11 11-34T
Chain :
KMC X11
Fork :
Genesis Carbon Road Disc
Front Derailleur :
Shimano 105 FD-R7000 L
Grip Tape :
Genesis
Headset :
F17A Tapered 1 1/8 inch - 1 1/5 inch
Hubs :
Formula Front - RX812 / Rear - RX300
Rear Derailleur :
Shimano 105 RD-R7000 11 Speed
Rims :
Jalco SR500
Saddle :
Genesis
Seat Post :
Genesis Alloy 27.2 x 350 mm
Shifters :
Shimano 105 ST-R7020 11 Speed
Spokes :
Steel 14 g
Tyres :
WTB Exposure 700 x 30c
Frame Shape :
Crossbar
Gender :
Mens, Womens
ProjektRide
Buy Sell Ride Confident
FAQ
Questions and answers
Please get in touch with a member of the team either by phone (01313745324) or email ([email protected]) where on of the team will be more than happy to help.
ProjektRide Bike Shop Edinburgh
If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.
Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.
We also have a physical store, if you are local please pop in -