Bikes
Shop All Second-Hand
Kids BikesProduct Details
See More
Mandible is the top Arundel model; its grip is the strongest of all Arundel cages. It's great in extreme situations. Mandible cages have weathered the Grand Tours, the Spring Classics, Worlds, all of it. Durable and elegant.
Shop All New Bikes
{
"@context": "http://schema.org/",
"@type": "Product",
"name": "Arundel Mandible Uni-Weave Carbon Bottle Cage",
"url": "https:\/\/projektride.co.uk\/products\/arundel-mandible-uni-weave-carbon-bottle-cage","image": [
"https:\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2023-10-26at10.16.07_1564x.png?v=1698311860"
],"description": "Mandible is the top Arundel model; its grip is the strongest of all Arundel cages. It's great in extreme situations. Mandible cages have weathered the Grand Tours, the Spring Classics, Worlds, all of it. Durable and elegant.","sku": "M2008-01C","brand": {
"@type": "Thing",
"name": "ProjektRide"
},"gtin8": "","offers": [{
"@type" : "Offer","sku": "M2008-01C","availability" : "http://schema.org/InStock",
"price" : 79.0,
"priceCurrency" : "GBP",
"url" : "https:\/\/projektride.co.uk\/products\/arundel-mandible-uni-weave-carbon-bottle-cage?variant=44455241941218"
}
]
}
Custom Build Inspiration
Gloria
327266,55569712382335,55569712447871,55569712480639,55570550194559,55570550227327,55604008976767,55638316908927,55638316941695,55638316974463,56220814999935,56220815032703,56270279606655,56270279639423,56270279672191,56314171064703,56314171097471,56398983725439,56398983758207,56398983790975,56399322251647,56565020721535,56565020754303,56565020787071],"updated_at":"2026-01-27T18:42:17Z","market_locations_enabled":false,"market_id":382140642,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2026-01-27T18:18:28Z","shopify_market_id":382140642,"market_locations_enabled":false};
window._RestockRocketConfig.cachedVariantPreorderLimitsMarketKey = "variant_preorder_limits_for_market_382140642";win
":" units available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","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_badClothing and Protections":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","disable_button_until_acknowledged":false,"preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"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,"schedule_offer":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,"See Moretle-cage","description":"\u003cmeta charset=\"utf-8\"\u003e\u003cspan data-mce-fragment=\"1\"\u003eMandible is the top Arundel model; its grip is the strongest of all Arundel cages. It's great in extreme situations. Mandible cages have weathered the Grand Tours, the Spring Classics, Worlds, all of it. Durable and elegant.\u003c\/span\u003e","published_at":"2023-10-26T10:17:38+01:00","created_at":"2023-10-26T10:17:38+01:00","vendor":"ProjektRide","type":"","tags":["Bike Packing","bottles and cages","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":7900,"price_min":7900,"price_max":7900,"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":44455241941218,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"M2008-01C","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Arundel Mandible Uni-Weave Carbon Bot
rongest of all Arundel cages. It's great in extreme situations. Mandible cages have weathered the Grand Tours, the Spring Classics, Worlds, all of it. Durable and elegant.\u003c\/span\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {44455241941218 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {44455241941218 : parseInt("10"),};
window._RestockRocketConfig.variantsPreorderCount = {44455241941218 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {44455241941218 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {44455241941218 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {44455241941218 : null,};
window._RestockRocketConfig.variantsShippingText = {44455241941218 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {44455241941218 : null,};
window._RestockRocketConfig.selected_variant_id = 44455241941218;
window._RestockRocketConfig.selected_v
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.normalizedLocal<!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
ce 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._RestockRocketConfigponse 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._RestockRocketConfig.inte
ocketScript(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);
}
}
li class="result">
div class="result__image" data-aspectratio="{{ it.product.image.aspectRatio }}" data-product-image>
div class="product__tag{{ it.product.badgeClasses }}">
The CARRY is a solid-sided functional basket with AVS integration. The sealed design will keep your belongings safe and dry if complemented with one of our rain covers.