Header Image
BUY <
& !Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) { console.debug('STOQ - locale not explicitly translated, will use default language from cache'); } } 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 } catch (err) { } }, true); } } catch (e) { } function applyTranslations(settings) { try { 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) { 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(
no cart selling plan updates needed'); } }) .catch(error => { console.error('STOQ - error updating cart selling plans:', error); }); } }); } (function loadStorefrontSettings() { const cfg = window._RestockRocketConfig; if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) return; function run() { const query = 'query StoqSettings($namespace: String!) { shop { metafield(namespace: $namespace, key: "settings") { value } } }'; fetch( `https://${cfg.shop}/api/2026-07/graphql.json`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken, }, body: JSON.stringify({ query: query, variables: { namespace: cfg.metafieldNamespace } }), } ) .then(function(response) { if (!response.ok) { throw new Error('Storefront API HTTP ' + response.st ngs; 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 no
onsole.error('STOQ - apply failed for ' + endpoint + ':', applyError); throw applyError; } }) .catch(function(error) { console.debug(`STOQ - using cached ${endpoint}:`, error.message); }); } function initializeScripts(settings) { settings = applyTranslations(settings); window._RestockRocketConfig.settings = settings; console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); if (!window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid) { console.debug('STOQ - Liquid cache stale, refreshing selling_plans + integrations'); Promise.race([ Promise.all([ fetchEmbedConfig('selling_plans', function(data) { if (data && Array.isArray(data.plans)) { window._RestockRocketConfig.sellingPlans = data.plans; window._RestockRocketConfig.disabledSellingPlanIds = data.disabled_plan_ids || []; } if (data && data.read_f
    ._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; }); const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds) && window._RestockRocketConfig.disabledSellingPlanIds.length > 0; const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds; const collectionScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlCollection : window._RestockRocketConfig.scriptUrlCollectionBis; const productScriptUrl = usePreorderBuild ? window._RestockRocketConfig.scriptUrlProduct : window._RestockRocketConfig.scriptUrlProductBis; const pageType = window._RestockRocketConfig.pageType; const collectionPageTypes = ['collection', 'index', 'search', 'page']; if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pageType}_enabled`])) { createRestockRocketScript(collectio#productTemplate--template--26482384994687__main { --PT: 60px; --PB: 30px; }
  • RIDE CONFIDENT

Marlin 7 Gen 3

Colour
Size
Quantity

The Marlin 7 is your best friend on the trail and wherever else you roll thanks to its confidence-boosting trail geometry. It finds the perfect balance between price and performance with a RockShox suspension fork that makes quick work of rocks and bumps in your path, and loads of gears from the SRAM NX Eagle 12-speed drivetrain.

Technology

Will my bike have a curved top tube? - Smaller frames have a top tube that dips down as it approaches the seat tube. This design makes for a lower standover height, which is good for shorter riders because it allows them to straddle their bike more easily. Larger frame sizes have a straight top tube because taller riders with longer legs typically don’t have the same issues with standover height.

Specification

Home /
Frame Alpha Silver Aluminium, internal derailleur and dropper post routing, rack and kickstand mount, 135x5 mm ThruSkew
Frame Material ALUMINIUM
Rim Size 29
ForkTrek
Pedals VP-536 nylon platformTeam Replica
Saddle
{"id":58205524492671,"title":"Carbon Red Smoke \/ L","option1":"Carbon Red Smoke","option2":"L","option3":null,"sku":"5319539","requires_shipping":true,"taxable":true,"featured_image":{"id":86929999561087,"product_id":15846741934463,"position":1,"created_at":"2026-08-18T16:05:52+01:00","updated_at":"2026-08-18T16:05:59+01:00","alt":"Madone SLR 9 AXS Gen 8","width":3000,"height":2250,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/MadoneSLR9AXS-25-46151-C-Primary_23153409-4481-4d95-8734-a89ce7511b5f.jpg?v=1787065559","variant_ids":[58205524492671,58205524525439,58205524558207,58205524590975,58205524623743]},"available":false,"name":"Madone SLR 9 AXS Gen 8 - Carbon Red Smoke \/ L","public_title":"Carbon Red Smoke \/ L","options":["Carbon Red Smoke","L"],"price":1050000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"601842999387","featured_media":{"alt":"Madone SLR 9 AXS Gen 8","id":72254454268287,"position":1,"preview_image":{"aspect_ratio":1.333,"height":2250,"width":3000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/MadoneSLR9AXS-25-46151-C-Primary_23153409-4481-4d95-8734-a89ce7511b5f.jpg?v=1787065559"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}

Frequently Asked Questions Quantity

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

    ProjektRide Bike Shop Edinburgh2

  • 3

    If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.

    Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.

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

    ProjektRide Bike Shop Edinburgh4

    82 Newington Road, EH91QN, Edinburgh.

5