Header Image
Zimbabwe (USD$)

Quantity
ock Build - Tequila Sunrise \/ Extra Small","public_title":"Tequila Sunrise \/ Extra Small","options":["Tequila Sunrise","Extra Small"],"price":230000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44915105038562,"title":"Tequila Sunrise \/ Small","option1":"Tequila Sunrise","option2":"Small","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Gravel Bike - Complete Shop Stock Build - Tequila Sunrise \/ Small","public_title":"Tequila Sunrise \/ Small","options":["Tequila Sunrise","Small"],"price":230000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44915105071330,"title":"Tequila Sunrise \/ Medium","option1":"Tequila Sunrise","opt ion2":"Medium","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Gravel Bike - Complete Shop Stock Build - Tequila Sunrise \/ Medium","public_title":"Tequila Sunrise \/ Medium","options":["Tequila Sunrise","Medium"],"price":230000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44915105104098,"title":"Tequila Sunrise \/ Large","option1":"Tequila Sunrise","option2":"Large","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Gravel Bike - Complete Shop Stock Build - Tequila Sunrise \/ Large","public_title":"Tequila Sunrise \/ Large","options":["Tequila Sunrise","Large"],"price":230000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_pla
n_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44915105136866,"title":"Tequila Sunrise \/ Extra Large","option1":"Tequila Sunrise","option2":"Extra Large","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Gravel Bike - Complete Shop Stock Build - Tequila Sunrise \/ Extra Large","public_title":"Tequila Sunrise \/ Extra Large","options":["Tequila Sunrise","Extra Large"],"price":230000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":44915105169634,"title":"Tequila Sunrise \/ Extra Extra Large","option1":"Tequila Sunrise","option2":"Extra Extra Large","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Gravel Bike - Complete Shop Stock Build - Tequila Sunrise \/ Extra Extra Large", "public_title":"Tequila Sunrise \/ Extra Extra Large","options":["Tequila Sunrise","Extra Extra Large"],"price":230000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01755.jpg?v=1761051082","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01758.jpg?v=1761051079","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01759.jpg?v=1761051079","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01760.jpg?v=1761051079","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01761.jpg?v=1761051079","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01762.jpg?v=1761051079","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01763.jpg?v=1761051078","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01764.jpg?v=1761051079","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01765.jpg?v=1761051079","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01767.jpg?v=1761051078","\/\/proj
ektride.co.uk\/cdn\/shop\/files\/DSC01768.jpg?v=1761051079","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01769.jpg?v=1761051079","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01770.jpg?v=1761051078","\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01771.jpg?v=1761051079"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01755.jpg?v=1761051082","options":["Colour","Size"],"media":[{"alt":null,"id":68259093021055,"position":1,"preview_image":{"aspect_ratio":1.505,"height":3264,"width":4912,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01755.jpg?v=1761051082"},"aspect_ratio":1.505,"height":3264,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01755.jpg?v=1761051082","width":4912},{"alt":null,"id":68259093053823,"position":2,"preview_image":{"aspect_ratio":1.505,"height":3264,"width":4912,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01758.jpg?v=1761051079"},"aspect_ratio":1.505,"height":3264,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01758.jpg ?v=1761051079","width":4912},{"alt":null,"id":68259093086591,"position":3,"preview_image":{"aspect_ratio":1.505,"height":3264,"width":4912,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01759.jpg?v=1761051079"},"aspect_ratio":1.505,"height":3264,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01759.jpg?v=1761051079","width":4912},{"alt":null,"id":68259093119359,"position":4,"preview_image":{"aspect_ratio":1.505,"height":3264,"width":4912,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01760.jpg?v=1761051079"},"aspect_ratio":1.505,"height":3264,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01760.jpg?v=1761051079","width":4912},{"alt":null,"id":68259093152127,"position":5,"preview_image":{"aspect_ratio":1.505,"height":3264,"width":4912,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01761.jpg?v=1761051079"},"aspect_ratio":1.505,"height":3264,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01761.jpg?v=1761051079","width":4912},{"{"aspect_ratio":1.505,"height":3264,"width":4912,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01769.jpg?v=1761051079"},"aspect_ratio":1.505,"height":3264,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01769.jpg?v=1761051079","width":4912},{"alt":null,"id":68259093414271,"position":13,"preview_image":{"aspect_ratio":1.505,"height":3264,"width":4912,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01770.jpg?v=1761051078"},"aspect_ratio":1.505,"height":3264,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01770.jpg?v=1761051078","width":4912},{"alt":null,"id":68259093447039,"position":14,"preview_image":{"aspect_ratio":1.505,"height":3264,"width":4912,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01771.jpg?v=1761051079"},"aspect_ratio":1.505,"height":3264,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/DSC01771.jpg?v=1761051079","width":4912}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp data-mce-fragme nt=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eOver the past three years at ProjektRide Bike shop, we've meticulously crafted hundreds of custom builds, gaining invaluable expertise in pairing the perfect parts with each frame. We've recently expanded our offerings to include complete Brothers bikes as part of our custom-build lineup.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eThe Brother Mehteh is an incredibly versatile bike, perfect for gravel riding, touring, commuting, and more. It's a true all-rounder, designed to excel in various riding conditions and applications.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eHere's what our complete Brother Mehteh gravel bike package includes:\u003c\/span\u003e\u003c\/p\u003e\n\u003cp on what size has been ordered.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eIf you're drawn to the aesthetic of the bike but feel you require a wider gear range, chunkier tires, or fancy upgrades, fear not! We specialize in custom builds tailored to your specific needs and preferences. Get in touch with us, and let's discuss how we can create your dream bike together.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eOnce you've placed your order for the bike, please expect a delivery time of approximately 7 to 10 days. Your patience is appreciated as we ensure your bike is prepared and delivered to you promptly.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eWe welcome collections, but if you're not local, rest assured that we'll ship th e bike to you with great care. Each bike is meticulously packaged to ensure it arrives safely at your doorstep. Once the bike box has been collected, we will give you the tracking information so you can keep track of your new bike!\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eIf you have any questions or inquiries, please don't hesitate to reach out to us. We strive to respond promptly and aim to get back to you within 5 working hours. Your satisfaction and peace of mind are our top priorities.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003e Email - \u003c\/span\u003e\u003ca href=\"mailto:edinburgh@projektride.co.uk\" data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eedinburgh@projektride.co.uk\u003c\/span\u003e\u003c\/a\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eT - 0131 374 5324\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eIf you would like to take advantage of the cycle to work schemes, please give us a call or email and we can get this set-up for you.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan style=\"font-weight: 400;\" data-mce-fragment=\"1\"\u003eThanks!\u003c\/span\u003e\u003c\/p\u003e"}; window._RestockRocketConfig.variantsInventoryPolicy = {44795338424546 : "deny",44795338457314 : "deny",44795338490082 : "deny",44795338522850 : "deny",44795338555618 : "deny",44915104973026 : "deny",44915105005794 : "deny",44915105038562 : "deny",44915105071330 : "deny",44915105104098 : "deny",44915105136866 : "deny",44915105169634 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {44795338424546 : parseInt("0"),447953384 57314 : parseInt("0"),44795338490082 : parseInt("0"),44795338522850 : parseInt("0"),44795338555618 : parseInt("0"),44915104973026 : parseInt("0"),44915105005794 : parseInt("0"),44915105038562 : parseInt("0"),44915105071330 : parseInt("0"),44915105104098 : parseInt("0"),44915105136866 : parseInt("0"),44915105169634 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {44795338424546 : parseInt(""),44795338457314 : parseInt(""),44795338490082 : parseInt(""),44795338522850 : parseInt(""),44795338555618 : parseInt(""),44915104973026 : parseInt(""),44915105005794 : parseInt(""),44915105038562 : parseInt(""),44915105071330 : parseInt(""),44915105104098 : parseInt(""),44915105136866 : parseInt(""),44915105169634 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {44795338424546 : null,44795338457314 : null,44795338490082 : null,44795338522850 : null,44795338555618 : null,44915104973026 : null,44915105005794 : null,44915105038562 : null,44915105071330 : null,44915entElement.classList.add('stoq-buy-now-pending'); setTimeout(function () { document.documentElement.classList.remove('stoq-buy-now-pending'); }, 6000); } } catch (e) { /* fail open */ } window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-product.js' window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-product-bis.js' window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-collection-bis.js' window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProdu ct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) // Canary override (STOQ-1287): prefer the Render host emitted into the // metafield-cached settings (api_host) when present, mirroring the same // override in assets/js/api.js. cachedSettings is populated above. Falls // back to the build-baked host for shops without the use_render_api_host // toggle (or environments where THEME_EXTENSION_API_HOST is unset), so the // setting.json + fetchEmbedConfig calls below route to the same host as the // rest of the extension's API traffic instead of staying on the baked host. window._RestockRocketConfig.host = (window._RestockRocketConfig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io' // Deployed extension build number, read from the CDN asset host Shopify generates: // https://cdn.shopify.com/extensions/< uuid>/< handle>-
< version>/assets/... // Trailing digits (e.g. ".../restockrocket-1-521/assets/" -> "521"). Kept numeric to // match ParseStoqData, so funnel app_version lines up with the order-attribution // app_version. Reflects the ACTUAL deployed build. This is the SINGLE source of the // parsed version — preorder.js getAppVersion() reads it back off config rather than // re-parsing, so the regex lives in exactly one place. try { const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; } catch (e) { window._RestockRocketConfig.appVersion = ''; } const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds const LIQUID_CACHE_MAX_AGE = 15 * 60; // 15 minutes in seconds // Calculate Liquid cache freshness once at initialization const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; // Validate timestamp and calculate ca
che age if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; window._RestockRocketConfig.liquidCacheAge = null; } else { const now = Math.floor(Date.now() / 1000); // Current time in seconds const liquidCacheAge = now - liquidRenderedAt; // Age in seconds // Surfaced into funnel events: a stale cache means the app rendered with // outdated inventory/selling-plan data — a real "had the opportunity but // failed" cause. Negative (client clock ahead) clamps to 0. window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); // Handle client clock ahead of server if (liquidCacheAge < 0) { console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else if (liquidCacheAge <
= LIQUID_CACHE_MAX_AGE) { console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`); window._RestockRocketConfig.isLiquidCacheFresh = true; } else { console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`); window._RestockRocketConfig.isLiquidCacheFresh = false; } } 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_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)) { 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') // Fire stoq_initialized once per page load so the funnel pipeline has a definitive // "our code ran on this page" signal independent of any cus tomer interaction. // Detected variants: the variants present in this page's Liquid context (product page has them; // collection/index/etc. don't expose variants from Liquid). Used to disambiguate "embed didn't // load" vs "embed loaded but the variant wasn't a preorder/BIS candidate" in order debug. try { const _stoqInitConfig = window._RestockRocketConfig; const _stoqDetectedVariantIds = (_stoqInitConfig.product && Array.isArray(_stoqInitConfig.product.variants)) ? _stoqInitConfig.product.variants.map(function(v) { return v.id }) : []; const _stoqSelectedVariantId = _stoqInitConfig.selected_variant_id; 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 || '', detected_variant_ids: _stoqDetectedVariantIds, selected_variant_id: _stoqSele
ctedVariantId || '', 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 // derivati on 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.close
st('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: (_sqTr ack.product && _sqTrack.product.id) || '', channel: channel, market_id: _sqTrack.marketId || '', 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_preorder_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 preord er bypass is detectable too. is_instock_variant: (function () { var has = function (a) { return Array.isArray(a) && a.indexOf(_sqVidNum) !== -1; }; return has(_sqTrack.inStockVariantIds) || has(_sqTrack.cachedInStockVariantIds && _sqTrack.cachedInStockVariantIds.in_stock_variant_ids); })(), // The enrolled plan's Shopify selling-plan id + inventory_provider (stoq = STOQ tracks // the OOS count; shopify = in-stock preorder). Tells order-debug what kind of preorder // the Buy Now bypassed, without a downstream lookup. enrolled_plan_id: (_sqPlan && (_sqPlan.shopify_selling_plan_id || _sqPlan.shopify_selling_plan_group_id)) || '', enrolled_plan_provider: (_sqPlan && _sqPlan.inventory_provider) || '', block_enabled: !!(_sqTrack.cachedSettings && _sqTrack.cachedSettings.block_accelerated_checkout), gate_armed: !!_sqTrack.a
cceleratedGateArmed, gate_active_at_click: !!(document.documentElement && document.documentElement.classList.contains('stoq-buy-now-pending')), }, }); } catch (err) { /* never break checkout */ } }, true); } } catch (e) { /* fail open */ } function applyTranslations(settings) { try { // Skip translation logic entirely if multi-language is not enabled if (!settings || !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 || {}) ); 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; } } // Setup event listener for cart selling plan updates // This must be called before any scripts are loaded to avoid race conditions func
html.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}.stoq-hide-buy-now .shopify-payment-button{display:none!important}.restock-rocket-button,.restock-rocket-button-float{opacity:1!important;border:none!important;cursor:pointer!important;background-image:none!important;box-shadow:none!important;padding:15px 20px;font-size:16px;width:100%;font-family:inherit}@font-face{font-family:OpenSans;font-weight:200;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Light.woff)}@font-face{font-family: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}.restock-rocket-wrapper{background-color:rgba(0,0,0,.5);z-index:123123123;width:100%;height:100%;overflow:auto;position:fixed;right:0;top:0;transition-property:all;transition-duration:.3s;display:flex;flex-direction:column;justify-content:center;}.restock-rocket-wrapper-inline{width:100%;height:100%;margin-top:20px}.restock-rocket-preorder-description{padding:10px 15px;margin-top:20px;display:flex;flex-direction:column;gap:10px;}.preorder-description-details{margin-bottom:0;display:flex;flex-direction:column;gap:10px;}.preorder-detail-item{display:flex;flex-direction:row;justify-content:start;gap:8px;align-items:center;}.restock-rocket-payment-widget{border:1px solid #ebebeb;margin-bottom:20px;}.restock-rocket-payment-option{display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:15px 20px;}.restock-rocket-payment-option:not(:last-child){border-bottom:1px solid #ebebeb;}.restock-rocket-payment-input-container{flex:1 1 auto;min-width:0}.restock-rocket-preorder-discount-badge{background:#ebebeb;height:25px;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-preorder-countdown-timer{display:flex;flex-direction:column;align-items:center;padding:16px;margin:8px 0;font-family:inherit;}.restock-rocket-preorder-countdown-timer .countdown-header{font-size:16px;margin-bottom:6px;text-align:center}.restock-rocket-preorder-countdown-timer .countdown-units{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}.restock-rocket-preorder-countdown-timer .countdown-unit{display:flex;flex-direction:column;align-items:center;gap:6px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:40px;padding:10px 6px;text-align:center;font-size:20px;line-height:1}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:14px;font-weight:500;text-align:center;text-transform:capitalize;opacity:.7}@media (max-width:768px){.restock-rocket-preorder-countdown-timer{padding:14px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:55px;padding:14px 10px;font-size:26px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:11px}}@media (max-width:480px){.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%);-webkit-transform:translateX(-100%);border-radius:0 10px 10px 0}.restock-rocket-toast-left.slide-out{-webkit-animation:.5s forwards slide-out-left;animation:.5s forwards slide-out-left}.restock-rocket-toast-right{right:0;transform:translateX(100%);-webkit-transform:translateX(100%);border-radius:10px 0 0 10px}.restock-rocket-toast-right.slide-out{-webkit-animation:.5s forwards slide-out-right;animation:.5s forwards slide-out-right}@keyframes slide{100%{transform:translateX(0)}}@-webkit-keyframes slide{100%{-webkit-transform:translateX(0)}}@keyframes slide-out-left{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}@-webkit-keyframes slide-out-left{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(-100%)}}@keyframes slide-out-right{0%{transform:translateX(0)}100%{transform:translateX(100%)}}@-webkit-keyframes slide-out-right{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(100%)}}.restock-rocket-preorder-progress-bar{padding:12px 15px;margin-bottom:20px;font-family:inherit;}.restock-rocket-preorder-progress-bar .preorder-progress-text{margin-bottom:8px;}.restock-rocket-preorder-progress-bar .preorder-progress-bar-row{display:flex;align-items:center;gap:10px;}.restock-rocket-preorder-progress-bar .preorder-progress-track{flex:1;height:12px;overflow:hidden;}.restock-rocket-preorder-progress-bar .preorder-progress-fill{display:block;height:100%;min-width:2px;transition:width 0.3s ease;}.restock-rocket-preorder-progress-bar .preorder-progress-percentage{font-weight:500;min-width:35px;text-align:right;}
Looking to purchase with a cycle to work scheme?

Click here to get in touch and get the ball rolling!

The 46er is the same length as a regular bike. And that’s where all similarities end. We ditched convention and added capability. Enough to make any cargo bike sweat. And gave it a sporty ride and front suspension. This unequalled combination of ride and capability starts with unequal wheels. 26" in the front for extra comfort and control, and 24″ in the back for strength and a lower centre of gravity. All powered by the Bosch CX Speed and a 500Wh intube battery. Born of true Etility® Design, the 46er is reshaping the future of the ebike. For Benno Bikes and the industry.

MANY BIKES IN ONE.

Swift, smooth and strong, the athletic 46er makes it look easy—hauling a load or just hauling down the road. Front suspension makes short work of uneven terrain, while an oversized rear rack expands your cargo options to give you unequaled capability in a standard-sized bike.

WARNING: When carrying passengers, rear wheel MUST be covered! Install Benno Wheel Guards or Utility Pannier Bags. Failure to do so could result in serious injury! Make sure that no parts of the body, clothing or load come near moving parts on the bicycle, such as chain, spokes, tyres or brakes.
Do not exceed individual load ratings and max gross weight.

Specifications

  • Frame6061 Aluminum Alloy with Front Tray Mounts
  • ForkSuntour SF18 MOBIE 25, 75mm Travel
  • HeadsetTop: Cane Creek ViscoSet, Mid-Tune / Bottom: FSA Integrated
  • HandlebarAluminum, Width 675mm, Rise 76mm
  • StemAluminum, Threadless, Extension 50mm
  • GripsBenno Ergo Profile, Lock-On
  • SaddleBenno Endurance with Rear Handle
  • SeatpostAluminum, Diameter 30.9mm, Length 350mm
  • Rear DerailleurShimano Deore
  • Gear LeversShimano Deore
  • ChainTaya e-DECA-101, 132 Links
  • Front Sprocket44T
  • CassetteShimano 10-Speed, 11~42T
  • Brake LeversMagura MT Thirty
  • Front BrakeMagura MT Thirty Disc 4 Piston, Rotor 180mm
  • Rear BrakeMagura MT Thirty Disc 2 Piston, Rotor 180mm
  • PedalsOne Piece Aluminum
  • RimsAluminum, Double Wall with Eyelets, 36H
  • Front HubShimano MT400 36h, 15mm Thru-Axle, Center Lock Disc
  • Rear HubShimano MT400 36h, 12mm Thru-Axle, Center Lock Disc
  • SpokesStainless 14G
  • TyresBenno Dual Sport (Front 26" x 2.35"/Rear 24" x 2.6") Puncture Resistant, 60
  • AccessoriesFits Most Aftermarket Pannier Bags and Accessories
  • Child SeatDesigned for Thule Yepp EasyFit and Other Compatible Rack Mount Child Seats
  • Rack46er Rear Rack, 19mm Tubing, Aluminum, Max. Load 130lbs/60kg
  • Front TrayCompatible
  • Rail SystemCompatible
  • MudguardsExtruded Aluminum
  • ControllerBosch Purion Display
  • Front LightGerman Supernova Mini 2
  • Rear LightGerman Supernova E3
  • MotorBosch Performance CX 250W, 85Nm, GEN 4
  • Assisted SpeedEU 25km/h
  • BatteryBosch PowerTube 500Wh Lithium-Ion, DualBattery Compatible (Not Included)
  • Battery Range (Single Battery)Single Battery: 30-80mi (50-130km)
  • Battery Range (Dual Battery)Dual Battery: 60-160mi (100-260km)
  • ChargerBosch Compact 4A
  • Charge Time4.5h
  • SizeOne Size – Fits Riders from 5’1” to 6’3”

Frequently Asked Questions

  • Please get in touch with a member of the team either by phone (01313745324) or email ([email protected]) where on of the team will be more than happy to help.

    ProjektRide Bike Shop Edinburgh

  • 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.

    We also have a physical store, if you are local please pop in -

    ProjektRide Bike Shop Edinburgh

    82 Newington Road, EH91QN, Edinburgh.