:8108874957026,"position":3,"created_at":"2023-06-25T10:50:34+01:00","updated_at":"2023-06-25T10:50:36+01:00","alt":null,"width":1286,"height":910,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636","variant_ids":[44140302532834]},"available":true,"name":"RACING FRAME PACK - 4L","public_title":"4L","options":["4L"],"price":9800,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","featured_media":{"alt":null,"id":31960256020706,"position":3,"preview_image":{"aspect_ratio":1.413,"height":910,"width":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636"}},"requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.19.png?v=1687686605","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636
"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604","options":["Size"],"media":[{"alt":null,"id":31960255856866,"position":1,"preview_image":{"aspect_ratio":1.307,"height":984,"width":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604"},"aspect_ratio":1.307,"height":984,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604","width":1286},{"alt":null,"id":31960255889634,"position":2,"preview_image":{"aspect_ratio":1.307,"height":984,"width":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.19.png?v=1687686605"},"aspect_ratio":1.307,"height":984,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.19.png?v=1687686605","width":1286},{"alt":null,"id":31960256020706,"position":3,"preview_image":{"aspect_ratio":1.413,"height":910,"width":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636"},"aspect_ratio":1.413,"height":910,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636","width":1286}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cdiv class=\"wrap-details read-more\" data-mce-fragment=\"1\"\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003eDESCRIPTION\u003ci class=\"tab-arrow\" data-mce-fragment=\"1\"\u003e\u003c\/i\u003e\n\u003c\/h3\u003e\n\u003cdiv data-mce-fragment=\"1\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eA lightweight frame bag, optimised for the rigours of ultra-distance competition and rides that push limits.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eDesigned for the needs of ultra-distance cycling competition and audax, the Racing Frame Pack utilises the area inside a bike’s main triangle, creating a lower centre o
f gravity and enabling more neutral handling. This makes it useful for storing heavier, bulkier items, as well as items that need to be accessed on the go.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe waterproof bike frame bag is constructed from a lightweight laminate created specifically for Apidura, and has been shaped to provide a universal fit, for use with any frame. The three velcro straps are lightweight, easy to use, and can be set in multiple positions for enhanced compatibility with top tube bags.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eAn integrated support structure adds stiffness and allows the frame bag to be exceptionally minimal and lightweight, and a flexible pocket divider securely holds contents in place. For added convenience, a protected cable port enables charging of devices on the go.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cb data-stringify-type=\"bold\" data-mce-fragment=\"1\"\u003eUse our\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/spa

<
<
div class="featured-image__bg bg-pos-center-center" style="background-image: url('//projektride.co.uk/cdn/shop/files/2571D9FF-E9AE-4004-9A55-C7FD4DD999D6_2048x.jpg?v=1640941114');">
a class="product__media product__media--featured"
href="/products/hire-smith-convoy-helmet"
title="Hire Lazer Compact Helmet"
aria-label="Hire Lazer Compact Helmet"
style="background-image: url(//projektride.co.uk/cdn/shop/files/my2023_tempo-kineticore-black_right_1400x1011800x600-removebg-preview_1_600x.png?v=1747484784)">
£849.15<span class="visually-hidden">Hire Lazer Compact Helmet£999.00
Fork Material :
<
Chain :
KMC X8
.
.
Aluminium Disc / Mudguard Eyelets
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.marketId = 382140642;window._RestockRocketConfig.countryName = 'United Kingdom';
window._RestockRocketConfig.countryIsoCode = 'GB';window._RestockRocketConfig.cartInventoryQuantity = {};window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_id":38
436,"currency":"GBP","created_at":"2025-07-26T09:13:57.337Z","updated_at":"2025-11-11T14:27:02.312Z","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":{},"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":"Please enter your name","storefront_form_did_you_mean_error":"Did you mean %{suggested_email}? Or use %{current_email}","form_customer_name_enabled":false,"form_customer_name_required":false,"css_config":"","js_config":null,"collect_promotion_consent":false,"storefront_form_promotion_consent_label":"Notify me about other news, sales, discounts & offers too","show_button_on_collection":false,"sms_default_country":"us","sms_restrict_country":false,"sms_default_channel":true,"optin_required":false,"optin_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_dis able_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_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":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send notification to your browser","insert_button_after_selector_page":null,"show_button_on_page":false,"insert_button_after_selector_search":null,"show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":"","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_link_visibility":true,"collection_buttons_container":null,"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_Shimano Tourney FD-TY710variant_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_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_badge_selector_type":"afterend","preorder_collection_badge_selector_type":"afterend","preorder_button_child_selector":"span","preorder_button_disclaimer_insert_selector":"","preorder_button_disclaimer_insert_selector_type":"afterend","preorder_payment_insert_selector":"","preorder_payment_insert_selector_type":"afterend","preorder_price_container_selector":"","preorder_price_container_selector_insert_type":"afterend","preorder_terms_insert_selector":"","preorder_terms_insert_selector_type":"afterend","preorder_original_price_selector":"","preorder_price_format":"{{amount}} {{currency}}","show_badge_if_any_variant_is_preorder":false,"enable_console_debug":false,"inline_form_enabled":false,"inline_form_selector":null,"inline_f
orm_selector_type":"afterend","storefront_form_prefill_customer":true,"market_setup_type":"single_market","shopify_app_id":5940125,"cache":true,"cached_at":"2025-11-11T14:27:02.333Z","multi_language_enabled":false,"translation_locale":"en"};window._RestockRocketConfig.cachedPreorderVariantIds = {"preorder_variant_ids":[42167799447778,43590980075746,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,43936152092898,43936152125666,4393619311843
eorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_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","pr
eorder_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 product.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selecto
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 - continu
e 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 r":null,"countdown_timer_insert_selector_type":"afterend","countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true}];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._RestockRocketC
onfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.product = {"id":8108874957026,"title":"RACING FRAME PACK","handle":"racing-frame-pack","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cdiv class=\"wrap-details read-more\" data-mce-fragment=\"1\"\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003eDESCRIPTION\u003ci class=\"tab-arrow\" data-mce-fragment=\"1\"\u003e\u003c\/i\u003e\n\u003c\/h3\u003e\n\u003cdiv data-mce-fragment=\"1\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eA lightweight frame bag, optimised for the rigours of ultra-distance competition and rides that push limits.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eDesigned for the needs of ultra-distance cycling competition and audax, the Racing Frame Pack utilises the area inside a bike’s main triangle, creating a lower centre of gravity and enabling more neutral handling. This makes it useful for storing heavier, bulkier items, as well as items that need
44140302500066 : parseInt("100"),44140302532834 : parseInt("100"),};
window._RestockRocketConfig.variantsPreorderCount = {44140302500066 : parseInt(""),44140302532834 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {44140302500066 : null,44140302532834 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {44140302500066 : parseInt(""),44140302532834 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {44140302500066 : null,44140302532834 : null,};
window._RestockRocketConfig.variantsShippingText = {44140302500066 : "",44140302532834 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {44140302500066 : null,44140302532834 : null,};
window._RestockRocketConfig.selected_variant_id = 44140302500066;
window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id })
.available;window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-collection.js'
window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
function checkSettingsExpiry(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;
}
// Checkto be accessed on the go.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe waterproof bike frame bag is constructed from a lightweight laminate created specifically for Apidura, and has been shaped to provide a universal fit, for use with any frame. The three velcro straps are lightweight, easy to use, and can be set in multiple positions for enhanced compatibility with top tube bags.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eAn integrated support structure adds stiffness and allows the frame bag to be exceptionally minimal and lightweight, and a flexible pocket divider securely holds contents in place. For added convenience, a protected cable port enables charging of devices on the go.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cb data-stringify-type=\"bold\" data-mce-fragment=\"1\"\u003eUse our\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e\u003ca href=\"https:\/\/www.apidura.com\/frame-pack-sizing\/\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/www.apiduGrip Tape :ra.com\/frame-pack-sizing\/\"\u003eInteractive Sizing Tool\u003c\/a\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eto find the perfect size pack for your bike.\u003c\/b\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"wrap-details read-more\" data-mce-fragment=\"1\"\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003eTECHNICAL\u003ci class=\"tab-arrow\" data-mce-fragment=\"1\"\u003e\u003c\/i\u003e\n\u003c\/h3\u003e\n\u003cdiv data-mce-fragment=\"1\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe bike frame bag is made from \u003ca href=\"https:\/\/www.apidura.com\/journal\/introducing-hexalon\/\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/www.apidura.com\/journal\/introducing-hexalon\/\"\u003eHexalon\u003c\/a\u003e, a bespoke laminated fabric developed specifically for Apidura. Designed to fit the demands of ultra-distance cycling competition, the material is waterproof and lightweight, with strong tear and abrasion resistance.\u003c\/p\u003e\n\u003cp data-mce-
fragment=\"1\"\u003eAn integrated thermoset structure is fully bonded to the inside of the frame bag, adding stiffness and allowing the bag to be minimal and lightweight.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eCare\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eWash The Racing Frame Pack by hand, using a mild diluted soap if necessary. Afterwards, let it air dry.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eDo not machine wash, machine dry, or iron.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","published_at":"2023-06-25T10:50:02+01:00","created_at":"2023-06-25T10:50:02+01:00","vendor":"Apidura","type":"bags","tags":["Accessories","Apidura","Bags and Transportation","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":9800,"price_min":9800,"price_max":9800,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_v
aries":false,"variants":[{"id":44140302500066,"title":"2.4L","option1":"2.4L","option2":null,"option3":null,"sku":"FRM","requires_shipping":true,"taxable":true,"featured_image":{"id":39357255188706,"product_id":8108874957026,"position":1,"created_at":"2023-06-25T10:50:02+01:00","updated_at":"2023-06-25T10:50:04+01:00","alt":null,"width":1286,"height":984,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604","variant_ids":[44140302500066]},"available":true,"name":"RACING FRAME PACK - 2.4L","public_title":"2.4L","options":["2.4L"],"price":9800,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","featured_media":{"alt":null,"id":31960255856866,"position":1,"preview_image":{"aspect_ratio":1.307,"height":984,"width":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604"}},"requires_selling_plan":false,"selling_plan_allocations":[]},{"id":44140302532834,"title":"4L","option1":"4L","option2":null,"option3":null,"sku":"FRL","requires_shipping":true,"taxable":true,"featured_image":{"id":39357255352546,"product_id":8108874957026,"position":3,"created_at":"2023-06-25T10:50:34+01:00","updated_at":"2023-06-25T10:50:36+01:00","alt":null,"width":1286,"height":910,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636","variant_ids":[44140302532834]},"available":true,"name":"RACING FRAME PACK - 4L","public_title":"4L","options":["4L"],"price":9800,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","featured_media":{"alt":null,"id":31960256020706,"position":3,"preview_image":{"aspect_ratio":1.413,"height":910,"width":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636"}},"requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at1 0.48.19.png?v=1687686605","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604","options":["Size"],"media":[{"alt":null,"id":31960255856866,"position":1,"preview_image":{"aspect_ratio":1.307,"height":984,"width":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604"},"aspect_ratio":1.307,"height":984,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.11.png?v=1687686604","width":1286},{"alt":null,"id":31960255889634,"position":2,"preview_image":{"aspect_ratio":1.307,"height":984,"width":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.19.png?v=1687686605"},"aspect_ratio":1.307,"height":984,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.48.19.png?v=1687686605","width":1286},{"alt":null,"id":31960256020706,"position":3,"preview_image":{"aspect_ratio":1.413,"height":910,"width":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636"},"aspect_ratio":1.413,"height":910,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-06-25at10.50.27.png?v=1687686636","width":1286}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cdiv class=\"wrap-details read-more\" data-mce-fragment=\"1\"\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003eDESCRIPTION\u003ci class=\"tab-arrow\" data-mce-fragment=\"1\"\u003e\u003c\/i\u003e\n\u003c\/h3\u003e\n\u003cdiv data-mce-fragment=\"1\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eA lightweight frame bag, optimised for the rigours of ultra-distance competition and rides that push limits.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eDesigned for the needs of ultra-distance cycling competRidgebackition and audax, the Racing Frame Pack utilises the area inside a bike’s main triangle, creating a lower centre of gravity and enabling more neutral handling. This makes it useful for storing heavier, bulkier items, as well as items that need to be accessed on the go.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe waterproof bike frame bag is constructed from a lightweight laminate created specifically for Apidura, and has been shaped to provide a universal fit, for use with any frame. The three velcro straps are lightweight, easy to use, and can be set in multiple positions for enhanced compatibility with top tube bags.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eAn integrated support structure adds stiffness and allows the frame bag to be exceptionally minimal and lightweight, and a flexible pocket divider securely holds contents in place. For added convenience, a protected cable port enables charging of devices on the go.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cb data-stringify-type=\"bold\" data-mce-fragment=\"1\"\u003eUse our\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003e\u003ca href=\"https:\/\/www.apidura.com\/frame-pack-sizing\/\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/www.apidura.com\/frame-pack-sizing\/\"\u003eInteractive Sizing Tool\u003c\/a\u003e\u003cspan data-mce-fragment=\"1\"\u003e \u003c\/span\u003eto find the perfect size pack for your bike.\u003c\/b\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"wrap-details read-more\" data-mce-fragment=\"1\"\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003eTECHNICAL\u003ci class=\"tab-arrow\" data-mce-fragment=\"1\"\u003e\u003c\/i\u003e\n\u003c\/h3\u003e\n\u003cdiv data-mce-fragment=\"1\"\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe bike frame bag is made from \u003ca href=\"https:\/\/www.apidura.com\/journal\/introducing-hexalon\/\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/www.apidura.com\/journal\/introducing-hexalon\/\"\u003eHexalon\u003c\/a\u003e, a be
spoke laminated fabric developed specifically for Apidura. Designed to fit the demands of ultra-distance cycling competition, the material is waterproof and lightweight, with strong tear and abrasion resistance.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eAn integrated thermoset structure is fully bonded to the inside of the frame bag, adding stiffness and allowing the bag to be minimal and lightweight.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003eCare\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eWash The Racing Frame Pack by hand, using a mild diluted soap if necessary. Afterwards, let it air dry.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eDo not machine wash, machine dry, or iron.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {44140302500066 : "continue",44140302532834 : "continue",};
window._RestockRocketConfig.variantsInventoryQuantity = {<
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 ||
.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-rocke!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;
}
}
// 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': 'skip'
};
if (window.Shopify?.them
e?.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) Headset :{
// If request failed and we have cached settings (even if expired), use them as fallback
if (cachedSettings) {
console.debug('STOQ - using expired cached settings as fallback');
initializeScripts(cachedSettings);
} else {
console.error('STOQ - failed to load settings:', error);
}
})
.catch(function(e) {
console.error(e)
})
}
function initializeScripts(settings) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
if(settings.enable_app) {
const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) {
return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType);
})
if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || setti
ngs.preorder_collection_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'index' && (settings.show_button_on_index || settings.preorder_index_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'search' && (settings.show_button_on_search || settings.preorder_search_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_page || settings.preorder_page_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'product') {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct);
} else if(hijackIntegration) {
createRestockRocketScript(window._RestockR
ocketConfig.scriptUrlCollection);
} else {
console.debug(`STOQ - no scripts enabled for ${window._RestockRocketConfig.pageType}`);
}
// Check and update cart selling plans after scripts are loaded
if (settings.preorder_enabled) {
updateCartSellingPlans();
}
// Dispatch custom event when app is loaded
const appLoadedEvent = new CustomEvent('stoq:loaded', {
detail: {
pageType: window._RestockRocketConfig.pageType,
enabled: settings.enable_app,
settings: settings
}
});
console.debug('STOQ - dispatching app loaded event');
window.dispatchEvent(appLoadedEvent);
}
}
function updateCartSellingPlans() {
// Wait for the API to be available with retries
const maxRetries = 10;
const retryDelay = 500;
function attemptCartCheck(attempt = 1) {
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);
});
} else if (attempt <t-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-inpu
t{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-pre
order-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 Hubs :slide-out-right{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(100%)}}
Shimano DH-3D37 / KT TC7R / front / rear
Mudguard :
Fitted
Pedals :
Resin Metro
Rear Derailleur :
Shimano Acera RD-M360
Rims :
Shining DB-31 /
Saddle :
Ridgeback Custom
Seat Post :
Alloy 27.2 x 350 mm
Shifters :
Shimano Acera SL-M315 Rapidfire Plus 2 x 8 Speed
Spokes :
Steel 14 g
Stem :
Ridgeback 70mm +7deg
Tyres :
Schwalbe Little Big Ben Relfex 700 x 40c
Frame Shape :
Crossbar
Gender :
Mens
Specification Disclaimer :
Ridgeback reserves the right to change product specifications without notice. Ridgeback will always ensure that these changes do not detract from the ride experience of the bike.



