Enigma
Working Hours
Socks{"id":8157073604834,"title":"ESI RCT Wrap Original Design","handle":"copy-of-rct-wrap","description":"\u003cmeta charset=\"utf-8\"\u003e\n\u003cp\u003eESI Grips RCT Wrap is perf
e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003eSuper Tacky\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003eNo Adhesives\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003eLong Lasting\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003eEasy to Install\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong\u003ePackage Includes:\u003c\/strong\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e2 long silicone wraps (for wrapping bar)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e2 short silicone wraps (for under hood)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e2 Silicone Tapes (adhere to themselves - 1 time use)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\
Cycle to Work
PedalsDelivery & Returns
<
img src="//projektride.co.uk/cdn/shop/products/31814-pm_2048x2048.png?v=1679149299" alt="Cane Creek Thudbuster ST G4" class="mfp-zoom-in-cur" id="31694930149602">
nner grip, wrap it tighter. It's that easy!\u003c\/p\u003e\n\u003cp\u003eMade from the same material as our mountain bike grips, our RCT Wrap is silicone which makes it UV resistant, non-porous and washable. The best part: there are no glues! If you didn't wrap it how you wanted it the first time, take it off and wrap it again.\u003c\/p\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e134-176 grams (Depends on how you stretch)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e3.5mm Thick\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e1\" Wide\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e2 Rolls at 6'2\" each\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003eCustom Fit\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003eStretchable\u003c\/li\u003e\n\u003c\/ul
)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e2 short silicone wraps (for under hood)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e2 Silicone Tapes (adhere to themselves - 1 time use)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cul\u003e\n\u003cli\u003e1 pair of NEW custom larger Bar Plugs\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/ul\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cspan\u003e \u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003ePatent No. D730,146 \u003c\/p\u003e","published_at":"2023-10-05T10:50:09+01:00","created_at":"2023-09-27T11:11:50+01:00","vendor":"ESI","type":"bar tape","tags":["Accessories","Grips \u0026 Bar-tape","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":3800,"price_min":3800,"price_max":3800,"available":false,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"com
tockRocketConfig || {}
// 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 = 1771298292;window._RestockRocketConfig.marketId = 382140642;window._RestockRocketConfig.countryName = 'United Kingdom';
window._RestockRocketConfig.countryIsoCode = 'GB';window._RestockRocketConfig.cartInventoryQuantity = {};window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_i
d":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":{"disableDebugLog
<
= 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')
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
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._RestockRocketConfig.cachedSetting
s;
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?.theme?.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
The Hook EXT C comes complete with a carbon frame and V2 carbon fork with triple cage mounts for speedier off-road raids. Sram provide the bike’s 10 – 42T XD cassette for a great range of gears, so you can keep the pace high over whichever surface you decide to tear across. Our friends at Hunt handle the hoops, providing the bike with a tubeless-ready Adventure Sport 27.5’’ wheelset. Finished with head-turning tan-wall WTB Venture tyres, onlookers will have to be quick if they want to catch a glimpse as you fly through the undergrowth. It comes in this year’s glossy metallic black colourway, too.
Frame
TORAY T700 / T800 Hi-Mod carbon, TA, rack / fender mounts, 68 mm T47 BB shell
Fork
Full carbon, TA, 1.1/2'' - 1.1/8'', triple cage mounts (can double as fender mounts), internal hub dynamo cable routing
Handlebar
BOMBTRACK CX-10 drop bar, 31.8 mm, 10° flare
Grips
BOMBTRACK ESCAPE bar tape
Stem
BOMBTRACK ROAM forged aluminium stem, -7°
Headset
Sealed integrated aheadset, 1.1/2'' - 1.1/8''
Levers
SRAM RIVAL 1 double tap hydraulic
Shifter
SRAM RIVAL 1 double tap 1 x 11
Brakes
SRAM RIVAL flat mount hydraulic disc brakes with 160 rotors
Crankset
"BOMBTRACK LYER forged aluminium crank, direct mount interface
(SRAM compatible), 30 mm spindle"
BB
BOMBTRACK T47 external sealed BB for 30 mm spindle
Pedals
-
Chain
KMC X11 EPT Anti Rust chain, 1/2'' x 11/128'', 114L
Chainring
CNC machined aluminium, narrow-wide, 38 T
Cassette
SRAM XG-1150 11-speed, 10 - 42 T
Front derailleur
-
Rear derailleur
SRAM RIVAL 1, clutch, long cage
Front hub
HUNT ADVENTURE SPORT sealed hub, centerlock disc
Rear hub
HUNT ADVENTURE SPORT sealed hub, 11-speed, centerlock disc, XD cassette body
Through axle
12 x 100 mm / 12 x 142 mm
Front rim
HUNT ADVENTURE SPORT double wall asymmetric rim, TLC, i20, 28h
Rear rim
HUNT ADVENTURE SPORT double wall asymmetric rim, TLC, i20, 28h
Saddle
BOMBTRACK COMP saddle
Seat post
BOMBTRACK YEW 27.2 mm x 300 mm
Seat clamp
BOMBTRACK PRIME 31.8 mm
Front tire
WTB VENTURE TCS LIGHT 27.5'' x 2.0'', tubeless ready
Rear tire
WTB VENTURE TCS LIGHT 27.5'' x 2.0'', tubeless ready
Fender
-
Rack
-
Light
-
Weight
9.4 kg (size M)
Weight frameset
1260 frame (size M, incl. TA, hanger, cable guides) / 600 g fork (300 mm steerer, incl. TA)
Maximum rider weight
105 kg incl. luggage
ASTM riding condition
2
ProjektRide
Buy Sell Ride Confident
FAQ
Questions and answers
I'm looking to find out more information about a product, where can I find this?
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
I'm looking to buy this product, when will it arrive and how much does postage cost?
If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.
Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.
We also have a physical store, if you are local please pop in -