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_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_t
ng_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_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._RestockRocketConfan\u003e\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eSmall, easy-reach brake levers for control\u003c\/span\u003e\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eComfortable \u0026amp; efficient pedalling, patented Frog cranks\u003c\/span\u003e\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eYouth-specific 8-speed gear shifter featuring FrogFit Technology®\u003c\/span\u003e\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eFloating chain glider for added safety \u0026amp; ease of maintenance\u003c\/span\u003e\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\u003ca data-mce-fragment=\"1\" href=\"https:\/\/www.frogbikes.co.uk\/warranty\" target=\"_blank\" data-mce-href=\"https:\/\/www.frogbikes.co.uk\/warranty\"\u003eFree 10-year extended warranty on frames and forks\u003c\/a\u003e\u003c\/li\u003e\n\u003cli data-mce-
onger head tube \u0026amp; raised slightly swept handlebar. It is equipped with 8-speed derailleur gears that provide more range for moderate speeds, \u0026amp; a floating chain glider to prevent clothing from getting stuck \u0026amp; chain from getting soiled.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eThis urban kids’ bike comes with low-resistance Kenda city tyres perfect for riding on road, full-length mudguards to protect clothes, a kickstand so that the bike is easy to park, a pannier rack, for transporting books \u0026amp; equipment. It features our patented Frog cranks, for more efficient pedalling.\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eSizing for cycling success\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eThe Frog City 53 urban bike is suitable for 5 to 7 years with a
3ebike sizing guide\u003c\/span\u003e\u003c\/a\u003e\u003cspan data-mce-fragment=\"1\"\u003e to discover the best-sized bike for your child or alternatively speak to our \u003c\/span\u003e\u003ca data-mce-fragment=\"1\" href=\"https:\/\/www.frogbikes.co.uk\/frogbikes-stores\" data-mce-href=\"https:\/\/www.frogbikes.co.uk\/frogbikes-stores\"\u003e\u003cspan data-mce-fragment=\"1\"\u003elocal stockists\u003c\/span\u003e\u003c\/a\u003e\u003cspan data-mce-fragment=\"1\"\u003e about our bike range.\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eAvailable colours*\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e: Teal, Pink, Black\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003csmall data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003e*Actual colours may vary due to the computer monitors differ display colours \u0026amp; people see colours differently. Our photos show s
"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Frog City 53 - Teal","public_title":"Teal","options":["Teal"],"price":55000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":54939169489279,"title":"Pink","option1":"Pink","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Frog City 53 - Pink","public_title":"Pink","options":["Pink"],"price":55000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":54939169522047,"title":"Black","option1":"Black","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Frog City 53 - Black","public_title":"Black","options":["Black"],"price":55000,"weight":0,"compare_at_price":null,.jpg?v=1736263116"},"aspect_ratio":1.364,"height":880,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/L-FC53_media-PINK-0.jpg?v=1736263116","width":1200},{"alt":null,"id":63810037088639,"position":3,"preview_image":{"aspect_ratio":1.364,"height":880,"width":1200,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/L-FC53_media-TEAL-0.default.jpg?v=1736263116"},"aspect_ratio":1.364,"height":880,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/L-FC53_media-TEAL-0.default.jpg?v=1736263116","width":1200}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003e \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eWhy buy a Frog City 53?\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-mce-fragment=\"1\"\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eLightweight 20-inch geared urban bike, a step-through frame\u003c\/span\u003e\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\
3ebike sizing guide\u003c\/span\u003e\u003c\/a\u003e\u003cspan data-mce-fragment=\"1\"\u003e to discover the best-sized bike for your child or alternatively speak to our \u003c\/span\u003e\u003ca data-mce-fragment=\"1\" href=\"https:\/\/www.frogbikes.co.uk\/frogbikes-stores\" data-mce-href=\"https:\/\/www.frogbikes.co.uk\/frogbikes-stores\"\u003e\u003cspan data-mce-fragment=\"1\"\u003elocal stockists\u003c\/span\u003e\u003c\/a\u003e\u003cspan data-mce-fragment=\"1\"\u003e about our bike range.\u003c\/span\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eAvailable colours*\u003c\/strong\u003e\u003cspan data-mce-fragment=\"1\"\u003e: Teal, Pink, Black\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003csmall data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003e*Actual colours may vary due to the computer monitors differ display colours \u0026amp; people see colours differently. Our photos show s03eReflectors, mudguard, pannier rack \u0026amp; kickstand\u003c\/span\u003e\u003c\/li\u003e\n\u003cli data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eSuitable for 5 to 7 years with a recommended inside leg of 49cm-65cm\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eThe 20-inch Frog City 53 kids’ bike is the ultimate urban geared bike, for 5 to 7-year-olds. This premium child’s city bike, designed for everyday kids' use, commute to school, explore a city in comfort \u0026amp; style. Has a lightweight, aluminium step-through frame, weighing just 8.45kg making the bike easy to mount, dismount \u0026amp; handle around town.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eWith this city bike, kids will enjoy more upright leisurely riding position, owing to longer head tube \u0026amp; raised slightly swept handlebapan\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eA big temptation is to buy a child's bike they will grow into. However, this will have the opposite effect \u0026amp; put your child off bikes \u0026amp; cycling altogether! Another common mistake is to purchase budget kids' bike, these models are often as heavy as a child which can lead to frustration at not being able to cycle. Frog bikes are lightweight \u0026amp; designed to specifically accommodate the anatomy of children.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eThe data obtained during our child-specific research has enabled us to create a helpful kids’ bike sizing app. View our \u003c\/span\u003e\u003ca data-mce-fragment=\"1\" href=\"https:\/\/www.frogbikes.co.uk\/fitting\" data-mce-href=\"https:\/\/www.frogbikes.co.uk\/fitting\"\u003e\u003cspan data-mce-fragment=\"1\"\u003ebike sizing guide\u003c\/span\u003e\u003c\/a\u003e\u003 colour may vary as paint batches vary. We cannot guarantee the colour you see accurately portrays true colour of product.\u003c\/span\u003e\u003c\/small\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eCAUTION! The kickstand is designed solely to support the weight of the bicycle. Avoid sitting on bicycle when kickstand is engaged to prevent potential damage to kickstand, bike frame or risk of injury.\u003c\/span\u003e\u003c\/p\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {54939169456511 : "deny",54939169489279 : "deny",54939169522047 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {54939169456511 : parseInt("0"),54939169489279 : parseInt("0"),54939169522047 : parseInt("0"),};
window._RestockRocketConfig.variantsPreorderCount = {54939169456511 : parseInt(""),54939169489279 : parseInt(""),54939169522047 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {54939169456511 : null,549
krocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019af0d1-c518-7a22-bdbf-9ceff49063ad/restockrocket-1-402/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_enInvalid 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 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?.themttings 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 === 'e 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 {
- <
- ly: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}.re
- 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;}.restock-rocket-preo 80px){.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:translateX(-100%);-we

Bells
Open navigation menu
Maintenance- Lights Open search bar
- Rider Care
SETTINGS_CACHE_DURATION) {
console.debug('STOQ - settings changed recently, skipping cache');
return null;
}
return settings;
} catch (error) {
console.debug('STOQ - Error checking settings cache:', error);
return null;
}
}
function createRestockRocketContainer() {
const restockRocketContainer = document.createElement('div');
restockRocketContainer.id = 'restock-rocket';
document.body.appendChild(restockRocketContainer);
}
function createRestockRocketScript(scriptUrl) {
const restockRocketScriptElement = document.createElement('script');
restockRocketScriptElement.setAttribute('defer', 'defer');
restockRocketScriptElement.src = scriptUrl;
document.body.appendChild(restockRocketScriptElement);
}
createRestockRocketContainer()
console.debug('STOQ - extension activated')
function applyTranslations(settings) {
try {
// Skip translation logic entirely if multi-language is not enabled
if (!settings ||
RIDE CONFIDENTload 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;
} catch (e) {
console.debug('STOQ - error applying translations:', e);
return settings;
}
}
// First
ders }
)
.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(integrBUYcketConfig.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) {
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 t