// Create "window.Shoppad.apps.infiniteoptions" object if it doesn't already exist
'Shoppad.apps.infiniteoptions'.split('.').reduce(function (o, x) {
if (!o[x]) {
o[x] = {};
}
return o[x];
}, window);
// Note we are using the theme app extension
window.Shoppad.apps.infiniteoptions.themeAppExtensionActive = true;
Socks
UTO (ex Eovolt)
Balance is everything when you're learning how to ride, and Kickster is the perfect teaching tool for toddlers who are mastering this important skill. This kids' balance bike doesn't have pedals so balance is the only focus, plus it features a handle so you can support your little one while they get the hang of things. Kickster is ideal for kids who are roughly 85–100 cm tall.
Here at ProjektRide, we rent out our in-house built Surly and Brothers bike packing bikes. These have been custom-built with care and attention to ensure you have an awesome and hassle-free time on your bike trip!
<
a class="product__media product__media--featured"
href="/products/genesis-croix-de-fer"
title="Hire Genesis Croix de Fer 30 (Drop Handlebars)"
aria-label="Hire Genesis Croix de Fer 30 (Drop Handlebars)"
style="background-image: url(//projektride.co.uk/cdn/shop/files/GenesisBroadway_3_600x.jpg?v=1745313082)">
<
a class="product__media product__media--featured"
href="/products/hire-genesis-croix-de-fer-10-flat-handlebars"
title="Hire Genesis Croix de Fer 20 (Flat Handlebars)"
aria-label="Hire Genesis Croix de Fer 20 (Flat Handlebars)"
style="background-image: url(//projektride.co.uk/cdn/shop/files/Genesis_Broadway_600x.jpg?v=1761139300)">
Bike Hire FAQspan class="visually-hidden">Hire Genesis Croix de Fer 20 (Flat Handlebars)
>
>
SaddlesCan I ProjektRide keep my belongings safe whilst I travel with the bike?Clothing
Here at ProjektRide, we rent out our in-house built Surly and Brothers bike packing bikes. These have been custom-built with care and attention to ensure you have an awesome and hassle-free time on your bike trip!
Seat Posts & ClampsWe are happy to keep your belongings safe, including suitcases etc. whilst you are out in one of our rental bikes.Socks
for more information. If you are returning your bike on a Sunday, please add a note to your order with your number and your ETA return date so we can arrange your drop off out-of-hours.Complete Wheels
Yes - you can come in store to hire a bike and can even pay with cash too! However, it would be best to
625698,43935995855074,43936000835810,43936003195106,43936003227874,43936008012002,43936008044770,43936022757602,43936022790370,43936022823138,43936022855906,43936056115426,43936061030626,43936064930018,43936070631650,43936078037218,43936078069986,43936088195298,43936093470946,43936101138658,43936107266274,43936124076258,43936124109026,43936124141794,43936124174562,43936129941730,43936129974498,43936130007266,43936142393570,43936142426338,43936142459106,43936152060130,43936152092898,43936152125666,43936193118434,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,439367062325
d 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_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_percent
r_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_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:43Open cartly out and about\u003c\/li\u003e\n\u003cli\u003eThis kit is equipped to treat most minor injuries and includes a loop on the back of the pack allowing you to attach it either to a belt or on the outside of a rucksack\u003c\/li\u003e\n\u003cli\u003eKit includes:\u003c\/li\u003e\n\u003cli\u003eGeneral: 1 x Primary Care Leaflet, 1 x Tweezers, 1 x Scissors (5.5cm Blade), 6 x Safety Pins\u003c\/li\u003e\n\u003cli\u003eBandages: 1 x White Open Woven Bandage 7.5cm x 5m, 1 x Crepe Bandage 5cm x 4.5m\u003c\/li\u003e\n\u003cli\u003ePreparations, Disposables \u0026amp; Tapes: 1 x Savlon Antiseptic Cream (15g Tube), 5 x 4-Ply Gauze Swabs 5 x 5cm, 1 x Micropore Tape 1.25cm x 5m, 3 x Hygienic Cleansing Wipes\u003c\/li\u003e\n\u003cli\u003eDressings: 1 x Low Adherent Dressing 5 x 5cm, 1 x Pack of Assorted Plasters\u003c\/li\u003e\n\u003cli\u003eWeight: 180g\u003c\/li\u003e\n\u003cli\u003eDimensions: 125 x 80 x 45mm\u003c\/li\u003e\n\u003cli\u003eRipstop fabrics with waterproof zip\u003c\/li\u003e\n\u003cli\u003eAll contents
the back of the pack allowing you to attach it either to a belt or on the outside of a rucksack\u003c\/li\u003e\n\u003cli\u003eKit includes:\u003c\/li\u003e\n\u003cli\u003eGeneral: 1 x Primary Care Leaflet, 1 x Tweezers, 1 x Scissors (5.5cm Blade), 6 x Safety Pins\u003c\/li\u003e\n\u003cli\u003eBandages: 1 x White Open Woven Bandage 7.5cm x 5m, 1 x Crepe Bandage 5cm x 4.5m\u003c\/li\u003e\n\u003cli\u003ePreparations, Disposables \u0026amp; Tapes: 1 x Savlon Antiseptic Cream (15g Tube), 5 x 4-Ply Gauze Swabs 5 x 5cm, 1 x Micropore Tape 1.25cm x 5m, 3 x Hygienic Cleansing Wipes\u003c\/li\u003e\n\u003cli\u003eDressings: 1 x Low Adherent Dressing 5 x 5cm, 1 x Pack of Assorted Plasters\u003c\/li\u003e\n\u003cli\u003eWeight: 180g\u003c\/li\u003e\n\u003cli\u003eDimensions: 125 x 80 x 45mm\u003c\/li\u003e\n\u003cli\u003eRipstop fabrics with waterproof zip\u003c\/li\u003e\n\u003cli\u003eAll contents are manufactured to European quality standards and carry the CE mark\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cmeta char
4210950570210 : null,};
window._RestockRocketConfig.selected_variant_id = 44210950570210;
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/019b9fa3-dc53-7a1c-9078-4931c5088fc8/restock-rocket-shopify-427/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019b9fa3-dc53-7a1c-9078-4931c5088fc8/restock-rocket-shopify-427/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(
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;
}
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 setting
izedLocale}`,
{ 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.integrattScript(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) {
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 updateCartSellingPl
e\n\u003cstrong\u003eFeatures \u0026amp; Benefits:\u003c\/strong\u003e\u003cspan\u003e\u003c\/span\u003e\n\u003cul\u003e\n\u003cli\u003eStyle and performance on a budget\u003c\/li\u003e\n\u003cli\u003eTurnfit TS plus adjustment: simply turn the dial at the rear of the helmet for a great fit\u003c\/li\u003e\n\u003cli\u003eIn-mould construction\u003c\/li\u003e\n\u003cli\u003e20 cooling vents\u003c\/li\u003e\n\u003cli\u003eWeight: 325g\u003c\/li\u003e\n\u003cli\u003eSize: Uni-size\u003cspan\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"}
dlebars)"
aria-label="Hire Genesis Croix de Fer 30 (Drop Handlebars)"
style="background-image: url(//projektride.co.uk/cdn/shop/files/GenesisBroadway_3_600x.jpg?v=1745313082)">
span class="visually-hidden">Hire Genesis Croix de Fer 30 (Drop Handlebars)
from £42.00 per day
<
Grips & Bar-Tapea class="product__media product__media--featured"
href="/products/hire-genesis-croix-de-fer-10-flat-handlebars"
title="Hire Genesis Croix de Fer 20 (Flat Handlebars)"
aria-label="Hire Genesis Croix de Fer 20 (Flat Handlebars)"
style="background-image: url(//projektride.co.uk/cdn/shop/files/Genesis_Broadway_600x.jpg?v=1761139300)">
4. Wait For Confirmation
Wait for one of the team to confirm your booking. This is separate from the payment confirmation. A confirmation email will be sent within 24 hours, during shop opening times.