:"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55877813207423,"title":"Extra Extra Large \/ Tequila Sunrise","option1":"Extra Extra Large","option2":"Tequila Sunrise","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Custom Build - Extra Extra Large \/ Tequila Sunrise","public_title":"Extra Extra Large \/ Tequila Sunrise","options":["Extra Extra Large","Tequila Sunrise"],"price":365000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55877813240191,"title":"Extra Extra Large \/ Stealth Black","option1":"Extra Extra Large","option2":"Stealth Black","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Custom Build - Extra Extra Large \/ Stealth Black","public_title":"Extra Extra Large \/ Stealth Black","options":["Extra Extra Large","SteaAmflow
Yeti
My Account
Open cart
Open navigation menu
Open search bar
FRONT HUB
003e\n\u003cli\u003eThomson Elite stem \/ seatpost\u003c\/li\u003e\n\u003cli\u003eRichey Bars\u003c\/li\u003e\n\u003cli\u003eFizik Bondcush Bartape\u003c\/li\u003e\n\u003cli\u003eBrooks C17 saddle\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e","published_at":"2025-09-30T15:00:35+01:00","created_at":"2023-09-08T12:59:07+01:00","vendor":"Brother Cycles","type":"Bicycles","tags":["brothers","Mehteh","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":365000,"price_min":365000,"price_max":365000,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":55877812715903,"title":"Extra Small \/ Tequila Sunrise","option1":"Extra Small","option2":"Tequila Sunrise","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Custom Build - Extra Small \/ TequiOpen cart
Brake Spares
om Build - Small \/ Tequila Sunrise","public_title":"Small \/ Tequila Sunrise","options":["Small","Tequila Sunrise"],"price":365000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55877812846975,"title":"Small \/ Stealth Black","option1":"Small","option2":"Stealth Black","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Brother Mehteh Custom Build - Small \/ Stealth Black","public_title":"Small \/ Stealth Black","options":["Small","Stealth Black"],"price":365000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55877812912511,"title":"Medium \/ Tequila Sunrise","option1":"Medium","option2":"Tequila Sunrise","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Brother Mehteh Custom Build - Mediu
Shimano 110x15mm
a Sunrise","public_title":"Large \/ Tequila Sunrise","options":["Large","Tequila Sunrise"],"price":365000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55877813043583,"title":"Large \/ Stealth Black","option1":"Large","option2":"Stealth Black","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Brother Mehteh Custom Build - Large \/ Stealth Black","public_title":"Large \/ Stealth Black","options":["Large","Stealth Black"],"price":365000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55877813109119,"title":"Extra Large \/ Tequila Sunrise","option1":"Extra Large","option2":"Tequila Sunrise","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Brother Mehteh Custom Build - Extra Large \/ Tequil
Location
e":"Brother Mehteh Custom Build - Extra Extra Large \/ Tequila Sunrise","public_title":"Extra Extra Large \/ Tequila Sunrise","options":["Extra Extra Large","Tequila Sunrise"],"price":365000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55877813240191,"title":"Extra Extra Large \/ Stealth Black","option1":"Extra Extra Large","option2":"Stealth Black","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Custom Build - Extra Extra Large \/ Stealth Black","public_title":"Extra Extra Large \/ Stealth Black","options":["Extra Extra Large","Stealth Black"],"price":365000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/857A8E35-C311-43E9-9463-EFFA24A8B98E_1_105_c.jpg?v=1694174350","\/\/projektride
Intended Use :
82 Newington Road
","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/D5A06756-9BB2-4822-95EA-2378728448FB_1_105_c.jpg?v=1694174353","width":1087},{"alt":null,"id":32249033982178,"position":6,"preview_image":{"aspect_ratio":1.506,"height":722,"width":1087,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/3A13BDCE-4D31-4294-80C4-A700E9CE7E26_1_105_c.jpg?v=1694174350"},"aspect_ratio":1.506,"height":722,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/3A13BDCE-4D31-4294-80C4-A700E9CE7E26_1_105_c.jpg?v=1694174350","width":1087},{"alt":null,"id":32249034014946,"position":7,"preview_image":{"aspect_ratio":1.506,"height":722,"width":1087,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/407F254E-3C6C-4FEB-8E63-30529F0FB988_1_105_c.jpg?v=1694174349"},"aspect_ratio":1.506,"height":722,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/407F254E-3C6C-4FEB-8E63-30529F0FB988_1_105_c.jpg?v=1694174349","width":1087},{"alt":null,"id":32249034047714,"position":8,"preview_image":{"aspect_ratio":1.506,"height":722
REAR HUB
ForksEdinburghCustom Builds for sale\/files\/82FE99D9-39D6-4F2C-8623-819788C26D6E_1_105_c.jpg?v=1694174351","width":722},{"alt":null,"id":32249034146018,"position":11,"preview_image":{"aspect_ratio":0.664,"height":1087,"width":722,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/EB39B78D-6686-43B5-BB4C-24E686301F2A_1_105_c.jpg?v=1694174350"},"aspect_ratio":0.664,"height":1087,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/EB39B78D-6686-43B5-BB4C-24E686301F2A_1_105_c.jpg?v=1694174350","width":722}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cp\u003eThe ultimate Gravel machine\u003c\/p\u003e\n\u003cp\u003eThe Mehteh is our Reynolds 725 steel gravel frame – a fast and agile drop bar bike, designed for long days in the saddle on varied terrain. We’ve pushed the tyre clearances beyond what you’d find on the average gravel bike giving the option of taking your ride even further off-road. Whether that’s a weekend gravel dash or a full blown bikepacking adventure.\u003c\/p\u003e\n\u003cp\u003eThe
Maxxis Minion DHR II EXO TR DUAL 29x2.4" WTChain :
Track Your Service
Pedals
FAQ
Questions and answers
KMC X9E
window._RestockRocketConfig = window._RestockRocketConfig || {}
// Helper function to normalize locale format from hyphen to underscore (e.g., 'en-US' -> 'en_us')
// This matches the backend's Mobility.normalize_locale behavior
// Returns empty string if locale is empty or invalid (matches original behavior)
function normalizeLocale(locale) {
if (!locale || locale.trim() === '') {
return '';
}
return locale.toString().toLowerCase().replace(/-/g, '_');
}
window._RestockRocketConfig.locale = 'en';
window._RestockRocketConfig.normalizedLocale = normalizeLocale('en');
window._RestockRocketConfig.shop = 'projektride.myshopify.com';
window._RestockRocketConfig.pageType = 'product';
window._RestockRocketConfig.liquidRenderedAt = 1770939620;window._RestockRocketConfig.marketId = 382140642;window._RestockRocketConfig.countryName = 'United Kingdom';
window._RestockRocketConfig.countryIsoCode = 'GB';window._RestockRocketConfig.cartInventoryQuantity = {};window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_id":38436,"currency":"GBP","created_at":"2025-07-26T09:13:57.337Z","updated_at":"2025-12-28T14:44:23.508Z","enable_app":true,"enable_signup_widget":false,"storefront_button_text":"Notify me when available","storefront_button_text_color":"#FFFFFF","storefront_button_background_color":"#202223","storefront_form_header":"Notify me","storefront_form_description":"Get a notification as soon as this product is back in stock by signing up below!","storefront_form_button_text":"Notify me when available","storefront_form_button_text_color":"#FFFFFF","storefront_form_button_background_color":"#202223","storefront_form_terms":"Promise we won't spam. You'll only receive notifications for this product.","storefront_form_error":"Please enter a valid email address","storefront_form_success":"Thank you! We will notify you when the product is available.","enable_powered_by":true,"show_button_on_preorder":true,"sms_enabled":false,"email_enabled":true,"storefront_button_disable_tag":"rocket-hide","theme_config":{"disableDebugLoggingForNonPreorderItem":false},"storefront_form_email_placeholder":"Email address","storefront_form_phone_placeholder":"SMS","storefront_form_phone_label":"Phone number","storefront_form_email_label":"Email","storefront_form_phone_error":"Please enter a valid phone number","storefront_form_customer_name_placeholder":"Name","storefront_form_customer_name_error":"Pl
DRIVEUNIT
nt_button_position_type":"float-right","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"This item needs to be purchased separately. Please check out or clear your cart before adding this item.","storefront_error_heading":"Error","default_locale":"en","collection_page_button_text_color":"#FFFFFF","collection_page_button_background_color":"#202223","show_button_if_any_out_of_stock":false,"show_button_if_any_variant_out_of_stock_collection":false,"show_button_on_index":false,"insert_button_after_selector_collection":null,"insert_button_after_selector_index":null,"push_enabled":false,"push_allowed":false,"storefront_form_push_label":"Push","storefront_form_push_description":"Click 'Allow' to be notified via push notification","storefront_form_push_error":"Permission rejected! Please review notification settings and try again","storefront_font_family":"OpenSans","insert_button_after_selector_collection_type":"afterend","show_channel_selector":
Other
order_button_out_of_stock_text":"Out of stock","preorder_button_add_to_cart_text":"Add to cart","preorder_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_enabled":false,"preorder_collection_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_index_enabled":false,"preorder_index_form_selector":"form[action*=\"/cart/add\"]","preorder_index_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_page_enabled":false,"preorder_page_form_selector":"form[action*=\"/cart/add\"]","preorder_page_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_search_enabled":false,"preorder_search_form_selector":"form[action*=\"/cart/add\"]","preorder_search_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_collection_badge_selector":null,"preorder_index_badge_selector":null,"preorder_page_badge_selector":null,"preorder_search_badge_selector":null,"preorder
Shimano E7000 20MPH
Gears
li class="result">
rder_progress_bar_insert_selector":null,"preorder_progress_bar_insert_selector_type":"beforebegin","countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","cache":true,"cached_at":"2026-01-08T16:12:13.364Z","multi_language_enabled":false,"translation_locale":"en"};window._RestockRocketConfig.cachedPreorderVariantIds = {"preorder_variant_ids":[42167799447778,43916521013474,43934694998242,43934695031010,43934695620834,43935975440610,43935975473378,43935989399778,43935989432546,43935990284514,43935994118370,43935995625698,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,4
Custom BuildsI'm looking to find out more information about a product, where can I find this?div class="result__image" data-aspectratio="{{ it.product.image.aspectRatio }}" data-product-image>
695844578,43981695877346,43981695910114,43981695942882,43981986070754,43981987905762,43981987938530,43981989085410,43981989118178,43981989150946,43981990887650,43981990920418,43981990953186,44052906967266,44052907327714,44052907360482,44052907393250,44052907426018,44052907458786,44052907491554,44052909097186,44052909129954,44140302827746,44140302893282,44140317016290,44155590508770,44155590541538,44155594211554,44155594244322,44155594277090,44155594309858,44155594342626,44155594375394,44155594440930,44155594473698,44155594506466,44195991847138,44195991945442,44329993437410,44329993470178,44329993502946,44329993535714,44329993568482,44957136584930,44957136781538,44957136945378,45068753961186,45068753993954,45069622640866,45069622903010,45069622968546,45069750730978,45069750763746,45353010921698,45353010954466,45353010987234,45353018261730,45353018294498,45353018327266,55569712382335,55569712447871,55569712480639,55570550194559,55570550227327,55604008976767,55638316908927,55638316941695,55638316974463,562208149
a href="{{ it.product.url }}" class="result__image-link" aria-label='{{ it.product.title }}'>
arket_locations_enabled":false};
window._RestockRocketConfig.cachedVariantShippingTextsMarketKey = "variant_shipping_texts_for_market_382140642";window._RestockRocketConfig.sellingPlans = [{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":713071886719,"enabled":true,"variant_ids":[55569712382335,55569712415103,55569712480639,55570017616255,55570017550719,55569712447871,55570017583487],"product_variants_source":"custom","name":"Preorder","preorder_button_text":"Preorder","preorder_button_description":"Note: This is a preorder. Items will ship based on the estimated 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_interval
div class="result__image-img product__media lazyload fade-in"
data-bgset="{{ it.product.image.thumb }}"
data-aspectratio="{{ it.product.image.aspectRatio }}"
data-sizes="auto">
{{@if(it.product.badgeText)}}
":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"2025-07-26T09:20:38.472Z","billing_after_n_intervals":7,"billing_after_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
Cycle To Work SchemesPlease get in touch with a member of the team either by phone (div class="product__tag{{ it.product.badgeClasses }}">#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}];window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_at":"2025-07-26T09:16:04.076Z"}];window._RestockRocketConfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.product = {"id":8108877742306,"title":"BACKCOUNTRY FOOD POUCH","handle":"backcountry-food-pouch","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eSimplicity and convenience at a moment’s notice, on any
01313745324span>{{ it.product.badgeText | safe }}he product, there is the possibility for water to enter through the seams when exposed to sustained rain. We recommend using an internal dry bag for contents that must remain absolutely dry.\u003c\/em\u003e\u003c\/p\u003e","published_at":"2023-06-25T12:00:20+01:00","created_at":"2023-06-25T12:00:20+01:00","vendor":"Apidura","type":"bags","tags":["Apidura","Bags and Transportation","Bike Packing","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":3700,"price_min":3700,"price_max":4500,"available":true,"price_varies":true,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":44140340707554,"title":"0.8L","option1":"0.8L","option2":null,"option3":null,"sku":"ABP","requires_shipping":true,"taxable":true,"featured_image":{"id":39357271834850,"product_id":8108877742306,"position":1,"created_at":"2023-06-25T12:00:44+01:00","updated_at":"2023-06-25T12:00:44+01:00","alt":null,"width":1234,"height":942,"src":"\/\/projekt
) where on of the team will be more than happy to help.>
o help keep the interior dry.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cem data-mce-fragment=\"1\"\u003eWhile the body fabric of the stem bag is waterproof, due to the stitching process used to assemble the product, there is the possibility for water to enter through the seams when exposed to sustained rain. We recommend using an internal dry bag for contents that must remain absolutely dry.\u003c\/em\u003e\u003c\/p\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {44140340707554 : "continue",44140340740322 : "continue",44140340773090 : "continue",};
window._RestockRocketConfig.variantsInventoryQuantity = {44140340707554 : parseInt("100"),44140340740322 : parseInt("100"),44140340773090 : parseInt("100"),};
window._RestockRocketConfig.variantsPreorderCount = {44140340707554 : parseInt(""),44140340740322 : parseInt(""),44140340773090 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {44140340707554 : null,44140340740322 : null,441403407
ProjektRide Bike Shop Edinburgh>
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019c4de0-280f-760f-b566-2e2f8e837eb8/restock-rocket-shopify-454/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
const LIQUID_CACHE_MAX_AGE = 2 * 60 * 60; // 2 hours in seconds
// Calculate Liquid cache freshness once at initialization
const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt;
// Validate timestamp and calculate cache age
if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) {
console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh');
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else {
const now =
>
<
p class="result__title">
<
a href="{{ it.product.url }}">{{ it.product.title }}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
I'm looking to buy this product, when will it arrive and how much does postage cost?>
<
>
!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:
>
ed to avoid race conditions
function setupCartSellingPlanUpdater(settings) {
if (!settings || !settings.preorder_enabled) {
return;
}
// Listen for stoq:preorder-api-ready event dispatched by preorder.js
window.addEventListener('stoq:preorder-api-ready', function(event) {
console.debug('STOQ - Preorder API ready, 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);
});
}
});
}
// First try to get settings from metafields with expiry check
const cachedSettings = window._Resto
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.
r('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}`);
// Setup cart selling plan updater BEFORE loading any scripts to avoid race conditions
setupCartSellingPlanUpdater(settings);
if(settings.enable_app) {
const hijackIntegration = window._RestockRoc
Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.
createRestockRocketScript(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}`);
}
// Dispatch custom event when app is loaded
// Cart selling plan updates will be triggered by stoq:preorder-api-ready event
const appLoadedEvent = new CustomEvent('stoq:loaded', {
detail: {
pageType: window._RestockRocketConfig.pageType,
enabled: settings.enable_app,
settings: settings,
preorderEnabled: settings.preorder_enabled
}
});
console.debug('STOQ - dispatching app loaded event');
window.dispatchEvent(appLoadedEvent);
}
}
We also have a physical store, if you are local please pop in -li class="result result--full">
ProjektRide Bike Shop Edinburghp class="result__title">{{ it.item.text }}
Complete Wheels
img src="//projektride.co.uk/cdn/shop/files/gloriaapparel-171_2048x2048.webp?v=1747758569" alt="Gloria Summer Jersey x Gobik" class="mfp-zoom-in-cur" id="65914400702847">
ode = 'GB';window._RestockRocketConfig.cartInventoryQuantity = {};window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_id":38436,"currency":"GBP","created_at":"2025-07-26T09:13:57.337Z","updated_at":"2025-12-28T14:44:23.508Z","enable_app":true,"enable_signup_widget":false,"storefront_button_text":"Notify me when available","storefront_button_text_color":"#FFFFFF","storefront_button_background_color":"#202223","storefront_form_header":"Notify me","storefront_form_description":"Get a notification as soon as this product is back in stock by signing up below!","storefront_form_button_text":"Notify me when available","storefront_form_button_text_color":"#FFFFFF","storefront_form_button_background_color":"#202223","storefront_form_terms":"Promise we won't spam. You'll only receive notifications for this product.","storefront_form_error":"Please enter a valid email address","storefront_form_success":"Thank you! We will notify you when the product is available.","enable_powered_by":true,"show_button_on_preo
Tubelesstin_success_text":"Registration confirmed! You'll receive an alert when the product is restocked.","storefront_button_border_radius":0,"storefront_button_disable_tag_hides_button":true,"storefront_button_disable_tag_enabled":false,"quantity_required":false,"storefront_form_quantity_label":"Quantity","enable_alerts":true,"sms_allowed":false,"email_allowed":true,"collect_promotion_consent_default":true,"insert_button_after_selector":null,"insert_button_after_selector_type":"afterend","storefront_button_position_type":"float-right","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"This item needs to be purchased separately. Please check out or clear your cart before adding this item.","storefront_error_heading":"Error","default_locale":"en","collection_page_button_text_color":"#FFFFFF","collection_page_button_background_color":"#202223","show_button_if_any_out_of_stock":false,"show_button_if_any_variant_out_of_stock_collection":false,"show_bu
ll,"index_buttons_container":null,"page_buttons_container":null,"search_buttons_container":null,"extension_enable_url_variant_detection":true,"extension_enable_value_variant_detection":true,"extension_value_variant_selector":"[name='id']","resubscribe_text":"This product is out of stock. Get notified when it's restocked again by entering your details below!","preorder_enabled":true,"preorder_buy_button_selector":null,"preorder_add_to_cart_button_selector":"","preorder_badge_selector":"","preorder_button_out_of_stock_text":"Out of stock","preorder_button_add_to_cart_text":"Add to cart","preorder_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_enabled":false,"preorder_collection_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_index_enabled":false,"preorder_index_form_selector":"form[action*=\"/cart/add\"]","preorder_index_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_page
img src="//projektride.co.uk/cdn/shop/files/gloriaapparel-172_98x.webp?v=1747758543" alt="" class="product-single__thumbnail-img">
pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"202
r":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}];window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hija
5000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55877813207423,"title":"Extra Extra Large \/ Tequila Sunrise","option1":"Extra Extra Large","option2":"Tequila Sunrise","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Custom Build - Extra Extra Large \/ Tequila Sunrise","public_title":"Extra Extra Large \/ Tequila Sunrise","options":["Extra Extra Large","Tequila Sunrise"],"price":365000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55877813240191,"title":"Extra Extra Large \/ Stealth Black","option1":"Extra Extra Large","option2":"Stealth Black","option3":null,"sku":null,"requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"Brother Mehteh Custom Build - Extra Extra Large \/ Stealth Black","publi
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
const LIQUID_CACHE_MAX_AGE = 2 * 60 * 60; // 2 hours in seconds
// Calculate Liquid cache freshness once at initialization
const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt;
// Validate timestamp and calculate cache age
if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) {
console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh');
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else {
const now = Math.floor(Date.now() / 1000); // Current time in seconds
const liquidCacheAge = now - liquidRenderedAt; // Age in seconds
// 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 Add to cart
= 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) {
// TranslationsNotify me when this product is available:
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;
}
}
// Setup event listener for cart selling plan updates
// This must be called before any scripts are loaded to avoid race conditions
function setupCartSellingPlanUpdater(settings) {
if (!settings || !settings.preorder_enabled) {
return;
}
// Listen for stoq:preorder-api-ready event dispatched by preorder.js
window.addEventListener('stoq:preorder-api-ready', function(event) {
console.debug('STOQ - Preorder API ready, updating cart selling plans');
if (window._RestockRocket && window._Rest