Humber electric cargo bikes combine Danish design, practical everyday transport and reliable Promovec electric-assist systems. Built for family journeys, business use and day-to-day utility, the range focuses on comfort, stability and useful cargo space.Dealer-backed support and service network
Battery and motor warranty support from Humber/Promovec
Promovec motor and battery system
Battery and motor warranty support from Humber/Promovec
[]
Frequently Asked Questions
{"@context":"http:\/\/schema.org\/","@id":"\/products\/humber-flex#product","@type":"ProductGroup","brand":{"@type":"Brand","name":"Humber Bicycles"},"category":"Electric cargo bike","description":"Humber FlexA flexible electric cargo bike designed for practical family and utility cycling. Humber Flex offers useful cargo capacity, electric assistance and a stable riding feel for everyday trips around town.Humber electric cargo bikes combine Danish design, practical everyday transport and reliable Promovec electric-assist systems. Built for family journeys, business use and day-to-day utility, the range focuses on comfort, stability and useful cargo space.\nElectric-assist cargo bike designed for everyday transport\nPromovec motor and battery system\nPractical design for family, commuting and business use\nDealer-backed support and service network\nBattery and motor warranty support from Humber\/Promovec\n","hasVariant":[{"@id":"\/products\/humber-flex?variant=57627496743295#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/8025200163_Humber_Flex_bone_1_shadow.jpg?v=1779891521\u0026width=1920","name":"Humber Flex - Bone \/ Boost \/ 540 Wh","offers":{"@id":"\/products\/humber-flex?variant=57627496743295#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"1799.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/humber-flex?variant=57627496743295"},"sku":"HB-HUMBER-FLEX-BONE-BOOST-540-WH"},{"@id":"\/products\/humber-flex?variant=57627496776063#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/8025200163_Humber_Flex_bone_1_shadow.jpg?v=1779891521\u0026width=1920","name":"Humber Flex - Bone \/ Long Range \/ 720 Wh","offers":{"@id":"\/products\/humber-flex?variant=57627496776063#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2099.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/humber-flex?variant=57627496776063"},"sku":"HB-HUMBER-FLEX-BONE-LONG-RANGE-720-WH"},{"@id":"\/products\/humber-flex?variant=57627496808831#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/8025200163_Humber_Flex_bone_1_shadow.jpg?v=1779891521\u0026width=1920","name":"Humber Flex - Midnight Forest \/ Boost \/ 540 Wh","offers":{"@id":"\/products\/humber-flex?variant=57627496808831#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"1799.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/humber-flex?variant=57627496808831"},"sku":"HB-HUMBER-FLEX-MIDNIGHT-FOREST-BOOST-540-WH"},{"@id":"\/products\/humber-flex?variant=57627496841599#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/8025200163_Humber_Flex_bone_1_shadow.jpg?v=1779891521\u0026width=1920","name":"Humber Flex - Midnight Forest \/ Long Range \/ 720 Wh","offers":{"@id":"\/products\/humber-flex?variant=57627496841599#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2099.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/humber-flex?variant=57627496841599"},"sku":"HB-HUMBER-FLEX-MIDNIGHT-FOREST-LONG-RANGE-720-WH"}],"name":"Humber Flex","productGroupID":"15691980407167","url":"https:\/\/projektride.co.uk\/products\/humber-flex"}
Please get in touch with a member of the team either by phone (
01313745324
) or email (
Frequently Asked Questions
[email protected]
) where on of the team will be more than happy to help.
ProjektRide Bike Shop Edinburgh
I'm looking to find out more information about a product, where can I find this?
Please get in touch with a member of the team either by phone (
01313745324
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. ) or email (
Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.[email protected]
We also have a physical store, if you are local please pop in -) where on of the team will be more than happy to help.
ProjektRide Bike Shop EdinburghProjektRide Bike Shop Edinburgh
I'm looking to buy this product, when will it arrive and how much does postage cost?
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.
We also have a physical store, if you are local please pop in -
ProjektRide Bike Shop Edinburgh
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;
}
}
// Setup event listener for cart selling plan updates
// This must be called before any scripts are loaded to avoid race conditions
function setupCartSellingPlanUpdater(settings) {
// Setup listener regardless - updateCartSellingPlans has its own guards
// This ensures cleanup happens even when preorders are disabled globally
// Listen for stoq:inventory-data-loaded event dispatched by api.js
window.addEventListener('stoq:inventory-data-loaded', function(event) {
console.debug('STOQ - Inventory data loaded, updating cart selling plans');
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);
});
}
});
}
// ---- Live settings via the Storefront API (additive, does not gate init) ----
// The inlined `cachedSettings` comes from the app-embed Liquid render, which
// Shopify edge-caches and can serve stale. Reading the same `settings` metafield
// back over the Storefront API is a POST to /api/
<refrontSettings = JSON.parse(value);
console.debug('STOQ - stored live settings from Storefront API on config.storefrontSettings');
})
.catch(function(e) {
console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message);
});
}
if (typeof window.requestIdleCallback === 'function') {
window.requestIdleCallback(run, { timeout: 5000 });
} else {
setTimeout(run, 0);
}
})();
// 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': 'ski
p'
};
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('S