This site has limited support for your browser. We recommend switching to Edge, Chrome, Safari, or Firefox.div 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 }}
get out of the car and on top of tough and comfortable Chromoly steel.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e100% Surly Chromoly steel frame and fork; double-butted main triangle\u003cbr data-mce-fragment=\"1\"\u003eFive frame sizes to fit nearly every size rider (XS, S, M, L, XL), with a slightly sloped top tube on XS and Small frames for improved standover and comfort\u003cbr data-mce-fragment=\"1\"\u003eFriendly with 1x and 2x drivetrains\u003cbr data-mce-fragment=\"1\"\u003eMounts for racks, mudguards, and two bottle cages (located on the seat tube and down tube)\u003cbr data-mce-fragment=\"1\"\u003eClearance for 650b x 41mm tyres on XS–S frame sizes (with or without mudguards); 700c x 41mm tyres on M–XL frame sizes (with or without mudguards)\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"col-md-4\" data-mce-fragment=\"1\"\u003e\n\u003cdiv class=\"logo-brand\" data-mce-fragment=\"1\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u00
UTO (ex Eovolt)Frog
Early Rider
Seat Posts & Clamps
feel, and just the right mounts for running racks, fenders, and bottle cages. Available in flat-bar and drop-bar configurations, it’s disc-brake specific and shares a single-position vertical dropout with Surly Bridge Club. For new weekend riders and veteran commuters, Preamble makes it easier than ever to get out of the car and on top of tough and comfortable Chromoly steel.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e100% Surly Chromoly steel frame and fork; double-butted main triangle\u003cbr data-mce-fragment=\"1\"\u003eFive frame sizes to fit nearly every size rider (XS, S, M, L, XL), with a slightly sloped top tube on XS and Small frames for improved standover and comfort\u003cbr data-mce-fragment=\"1\"\u003eFriendly with 1x and 2x drivetrains\u003cbr data-mce-fragment=\"1\"\u003eMounts for racks, mudguards, and two bottle cages (located on the seat tube and down tube)\u003cbr data-mce-fragment=\"1\"\u003eClearance for 650b x 41mm tyres on XS–S frame sizes (with or without mudguards); 700c
QUICK LINKSShop by BrandRocketConfig.variantsPreorderCountForMarket = {43936664879330 : null,43936664912098 : null,43936664944866 : null,43936664977634 : null,43936665010402 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {43936664879330 : parseInt(""),43936664912098 : parseInt(""),43936664944866 : parseInt(""),43936664977634 : parseInt(""),43936665010402 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {43936664879330 : null,43936664912098 : null,43936664944866 : null,43936664977634 : null,43936665010402 : null,};
window._RestockRocketConfig.variantsShippingText = {43936664879330 : "",43936664912098 : "",43936664944866 : "",43936664977634 : "",43936665010402 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {43936664879330 : null,43936664912098 : null,43936664944866 : null,43936664977634 : null,43936665010402 : null,};
window._RestockRocketConfig.selected_variant_id = 43936664879330;
window._RestockRocketConfig.selected_variant_available = wspo-notify-me-disabled
See More }
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.multi_language_enabled) {
if (!settings.translations) {
// Translations enabled but no translation data in metafield
// Metafield hasn't been backfilled yet - force refresh
console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh');
return null;
}
// Translations object exists in metafield - cache is valid
// If current locale isn't translated, applyTranslations will gracefully use default locale from base fields
if (window._RestockRocketConfig.normalizedLocale &&
!Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) {
cons
PedalsAbout Us
Contact Us
!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 || {})
Blog
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');
Touring
Gears & DrivetrainBuilding Your Bike From the Box
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 used
See MoreInsure Your Bike
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();
}