{"@context":"http:\/\/schema.org\/","@id":"\/products\/cube-aruba-hybrid-600-papaya-creme#product","@type":"ProductGroup","brand":{"@type":"Brand","name":"CUBE"},"category":"Bicycles","description":"The Aruba Hybrid is the environmentally friendly Bosch-powered e-bike to appeal to your inner fashionista, but its beauty is far more than skin deep. The Easy Entry frame is comfortable to ride, with a practical step-through design that's ideal for everyday use and won't cramp your style. The sturdy carrier is a handy way to carry whatever you need with you. The chain guard, mudguards, lighting system and kickstand mean you're all set for any eventuality. And, of course, the powerful Bosch Performance motor and low maintenance Shimano 5-speed hub gears make light work of any journey, backed up by strong and dependable Shimano hydraulic disc brakes to help keep you safe in any weather.Frame descriptionChic and good-looking it may be, but the Aruba Hybrid's design detail is every bit as cool. Our PowerTube design incorporates the 600Wh Bosch battery inside the frame for miles of worry-free pedalling, and its head-turning elegance is finished with our Smooth Welding technique for an organic flow to the frame's lines. We fitted a 1.5in head tube because it's strong, safe and improves steering accuracy for easy, intuitive handling. There's a semi-integrated luggage carrier, and Easy Entry does exactly what it says, making access simple for any rider. And everything is colour-coded, because obviously.Specification\n\nFrame\nAluminium Superlite, Comfort Ride Geometry, Premium Comfort And Safety, Semi-Integrated Carrier, Fully Integrated Battery, Advanced Internal Cable Routing\n\n\nFork\nSR Suntour NEX-E25, 50mm\n\n\nHeadset\nACROS AZF-1035, ICR (Integrated Cable Routing), Top Zero-Stack 1 1\/2\" (ZS 56mm), Bottom Zero-Stack 1 1\/2\" (ZS 56mm), HIC\n\n\nStem\nCUBE Comfort City Stem, 31.8mm\n\n\nHandlebar\nCUBE Comfort Shape Bar\n\n\nGrips\nCUBE Retro\n\n\nShifters\nShimano Nexus SL-C7000-5, Revoshift\n\n\nBrakes\nShimano BR-MT200, Hydr. Disc Brake (180)\n\n\nCrankset\nACID Trekking Hybrid, 38T\n\n\nCrankset chainring sizes\n38T\n\n\nGear Teeth\nShimano Nexus, 27T\n\n\nNumber of gears\n5\n\n\nChain\nKMC Z610\n\n\nRims\nCUBE SX24, Disc, 36H\n\n\nFront hub\nShimano HB-QC400, QR, Centerlock\n\n\nRear hub\nShimano Nexus SG-C7000-5D, 5-Speed, Centerlock\n\n\nTires (Front \u0026amp; Rear)\nSchwalbe Motion Big Apple, K-Guard, 50-622\n\n\nPedals\nACID PP Trekking\n\n\nSaddle\nCUBE Retro\n\n\nSeatpost\nCUBE Performance Post, 30.9mm\n\n\nSeat post = dropper Yes\/No\nNO\n\n\nFront light\nTrelock Bike-i Retro Ebike, 12V, DC\n\n\nRear light\nCUBE Edge IC 2.0 Rear LED, 12V, DC\n\n\nKickstand\nACID FM Pure Kickstand\n\n\nMudguard\nACID 50 BB-Mount\n\n\nBell\nCUBE Classic\n\n\nCarrier\nACID SIC 2.0 RILink\n\n\nEngine\nBosch Drive Unit Performance Line 75Nm (BDU33)\n\n\nBattery\nBosch PowerTube 600\n\n\nCharger\nBosch 2A\n\n\nRemote\nBosch Purion 200 with Integrated Display\n\n\nNet weight (kg)\n27.8\n\n\nGross weight (kg)\n32.82\n\n\nMax. system weight (kg)\n140\n\n\nMax. rider weight (kg)\n110\n\n\nBody size\n1.50m - 1.61m\n\n\nAccessories\n93339,94799,93483,93467,93354,15091,93592\n\n","hasVariant":[{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152830847#variant","@type":"Product","gtin":"4054571499851","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/114760.jpg?v=1781347567\u0026width=1920","name":"CUBE ARUBA HYBRID 600 PAPAYA\/CREME - Step-through \/ Easy Entry \/ papaya\/creme \/ 42 cm","offers":{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152830847#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2499.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152830847"},"sku":"114760EE42"},{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152863615#variant","@type":"Product","gtin":"4054571499868","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/114760.jpg?v=1781347567\u0026width=1920","name":"CUBE ARUBA HYBRID 600 PAPAYA\/CREME - Step-through \/ Easy Entry \/ papaya\/creme \/ 46 cm","offers":{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152863615#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2499.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152863615"},"sku":"114760EE46"},{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152896383#variant","@type":"Product","gtin":"4054571499875","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/114760.jpg?v=1781347567\u0026width=1920","name":"CUBE ARUBA HYBRID 600 PAPAYA\/CREME - Step-through \/ Easy Entry \/ papaya\/creme \/ 50 cm","offers":{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152896383#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2499.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152896383"},"sku":"114760EE50"},{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152929151#variant","@type":"Product","gtin":"4054571499882","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/114760.jpg?v=1781347567\u0026width=1920","name":"CUBE ARUBA HYBRID 600 PAPAYA\/CREME - Step-through \/ Easy Entry \/ papaya\/creme \/ 54 cm","offers":{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152929151#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2499.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152929151"},"sku":"114760EE54"},{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152961919#variant","@type":"Product","gtin":"4054571499899","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/114760.jpg?v=1781347567\u0026width=1920","name":"CUBE ARUBA HYBRID 600 PAPAYA\/CREME - Step-through \/ Easy Entry \/ papaya\/creme \/ 58 cm","offers":{"@id":"\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152961919#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2499.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/cube-aruba-hybrid-600-papaya-creme?variant=57747152961919"},"sku":"114760EE58"}],"name":"CUBE ARUBA HYBRID 600 PAPAYA\/CREME","productGroupID":"15720150335871","url":"https:\/\/projektride.co.uk\/products\/cube-aruba-hybrid-600-papaya-creme"}
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.
Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.
onStorage.getItem('_stoq_pls') || '0', 10) || 0) + 1;
window.sessionStorage.setItem('_stoq_pls', String(_stoqPageSeq));
} catch (e) { /* sessionStorage unavailable (private mode) — leave 0 */ }
Shopify?.analytics?.publish?.('stoq_initialized', {
cart_token: _stoqInitConfig.cartToken || '',
page_url: window.location.href,
page_type: _stoqInitConfig.pageType || '',
shop_domain: _stoqInitConfig.shop || '',
market_id: _stoqInitConfig.marketId || '',
// Buyer's storefront country (localization.country.iso_code). Seeds the
// pixel's extension_details blob so it rides forward onto Shopify's native
// events too — a market can span countries, so this is the finer signal.
country_code: _stoqInitConfig.countryIsoCode || '',
detected_variant_ids: _stoqDetectedVariantIds,
selected_variant_id: _stoqSelectedVariantId || '',
page_load_seq: _stoqPageSeq,
liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0,
app_version: _stoqInitConfig.appVersion || '',
liquid_cache_age: _stoqInitConfig.liquidCacheAge,
// Selected variant's stock posture as our app saw it at render — explains
// whether we *should* have treated it as a preorder candidate.
inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '',
inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId],
});
} catch (e) {
console.debug('STOQ - stoq_initialized publish failed:', e);
}
// STOQ-1595: publish stoq_accelerated_checkout_clicked for every accelerated-checkout
// click (Buy Now / dynamic checkout / Shop Pay installments) on ALL surfaces, before our
// bundle loads, via one delegated capture-phase listener (catches late-rendered buttons).
// Only on shops with preorders configured (shared `preordersConfigured` signal from the
// derivation block above) — nothing to bypass otherwise. variant_id is read per-clicked-button
// from its form so it's correct on collection/index/search too. block_accelerated_checkout
// context (STOQ-1612) rides in `properties` (forwarded verbatim by the pixel, no schema
// change): a buy_now click on a preorder variant while the gate was armed is a visible
// bypass signal for order debug. Also sends page_url (top-level, like the pixel's native
// events) and two preorder signals in properties (see below).
try {
var _sqTrack = window._RestockRocketConfig;
if (_sqTrack.preordersConfigured) {
document.addEventListener('click', function (e) {
try {
var t = e.target;
if (!t || !t.closest) return;
var host = t.closest('.shopify-payment-button, shopify-payment-terms');
if (!host) return;
var channel = host.matches && host.matches('shopify-payment-terms')
? 'shop_pay_installments' : 'buy_now';
var form = host.closest('form');
var vidEl = form && form.querySelector('[name="id"]');
var variantId =
(vidEl && vidEl.value) || _sqTrack.selected_variant_id || '';
// The enabled STOQ selling plan the clicked variant belongs to (if any), found once and
// reused for in_enabled_plan / enrolled_plan_id / enrolled_plan_provider below.
var _sqVidNum = Number(variantId);
var _sqPlan = null;
// Array.isArray guard (not `|| []`) so a truthy non-array sellingPlans can't throw and
// silently drop the whole publish.
var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : [];
_sqPlans.forEach(function (pl) {
if (!_sqPlan && pl && pl.enabled && Array.isArray(pl.variant_ids) &&
pl.variant_ids.indexOf(_sqVidNum) !== -1) { _sqPlan = pl; }
});
Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', {
variant_id: variantId,
product_id: (_sqTrack.product && _sqTrack.product.id) || '',
channel: channel,
market_id: _sqTrack.marketId || '',
country_code: _sqTrack.countryIsoCode || '',
page_type: _sqTrack.pageType || '',
cart_token: _sqTrack.cartToken || '',
page_url: (window.location && window.location.href) || '',
properties: {
// Mirror the bundle's own preorder check (preorder.js checkInventoryProvider-
// WithCachedFallback): the live set config.preorderVariantIds (refreshed after
// page load by loadVariantInventoryData) OR the Liquid-injected
// cachedPreorderVariantIds — always present, so it covers clicks before the
// bundle loads (why this tracker is inline). ORing both (not preferring one)
// matches the bundle and is correct even if the live set is an empty array. Both
// hold integer ids; the click-time id comes off a DOM input (.value → string) or
// selected_variant_id, so coerce with Number for a like-typed compare.
is_preord
er_variant: (function () {
var vid = Number(variantId);
var has = function (a) { return Array.isArray(a) && a.indexOf(vid) !== -1; };
return has(_sqTrack.preorderVariantIds) ||
has(_sqTrack.cachedPreorderVariantIds &&
_sqTrack.cachedPreorderVariantIds.preorder_variant_ids);
})(),
// Narrow, authoritative preorder signal: enrolled in an ENABLED STOQ selling plan
// (is_preorder_variant above is the broad OOS+continue heuristic — non-STOQ too).
in_enabled_plan: !!_sqPlan,
// In-stock preorder signal: enrolled but currently IN STOCK (in the inStockVariantIds
// set, not the OOS preorderVariantIds set). Same live-OR-cached pattern as
// is_preorder_variant. is_preorder_variant OR is_instock_variant = "should sell via
// the plan" regardless of stock, so an in-stock preorder bypass is detectable too.
is_ 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//graphql.json — never
// CDN-cached — so it returns the live value on every page load. We fetch it
// best-effort and stash it on `window._RestockRocketConfig.storefrontSettings`
// so individual behaviours can migrate onto the fresh value over time. This is
// PURELY ADDITIVE: it does NOT change the resolution flow below, never blocks
// init, and silently no-ops on any failure / missing token.
(function loadStorefrontSettings() {
const cfg = window._RestockRocketConfig;
if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) return;
// Deferred to browser idle so this best-effort read runs strictly AFTER the
// critical init flow and never competes with it for a connection — the call
// is a live, uncached Storefront round-trip and can be slow (mult