£15.00
Most relevant
Best sellingAlphabetically, A-Z BLUEBERRY PRESERVE (340g) £4.80 Alphabetically, Z-A Price, low to high
Price, high to low
Date, old to new
Date, new to old
£4.80
Caramelised Onion flavoured Cheddar Speciality Range from The Isle of Arran £2.40
Add to cart £6.60
window.EComposer = window.EComposer || {};
window.EComposer.TEMPLATE_ID="64d4cd6c58f2bda826061ec2";
window.EComposer.FOOTER = {"template_id":"64d4cd6c58f2bda826061ec2","title":"Footer","type":"footer","slug":"ecom-footer","plan_id":2};
Contact us
[email protected]
07785 527 831

Support
Terms & Conditions
Copyright 2026. All Rights Reserved by The John Muir Country Store. Site by
Fifth House
Choosing a selection results in a full page refresh. Empire Biscuits - Twin Pack COFFEE BREAK FAVOURITES Opens in a new window.
//SendWILL APPS COMMON JS CODE
window.EcomSendApps = window.EcomSendApps || {}
window.EcomSendApps.design_mode = false
window.EcomSendApps.common = window.EcomSendApps.common || {}
window.EcomSendApps.common.shop = {
permanent_domain: 'john-muir-country.myshopify.com',
currency: "GBP",
money_format: "£{{amount}}",
id: 80637690163,
}
window.EcomSendApps.common.customer = {
id: null,
tags: null,
email: null,
accepts_marketing: null,
first_name: null,
}
window.EcomSendApps.common.template = 'collection'
window.shopLocale = 'en'
/** @description storefront main bundle asset url */
const ECOMSEND_MAIN_SCRIPT_URL = 'https://cdn.shopify.com/extensions/019e495f-7812-7585-9f80-ffd68a7c1d23/ecomsend-148/assets/ecomsend.js'
/** @description storefront style asset url */
const ECOMSEND_MAIN_STYLE_URL = 'https://cdn.shopify.com/extensions/019e495f-7812-7585-9f80-ffd68a7c1d23/ecomsend-148/assets/style.css'
/** @description storefront wasm asset url for runtime signature module */
const ECOMSEND_WASM_ASSET_URL = 'https://cdn.shopify.com/extensions/019e495f-7812-7585-9f80-ffd68a7c1d23/ecomsend-148/assets/client_safe.wasm'
/** @description fallback delay when requestIdleCallback is unavailable */
const ECOMSEND_IDLE_TIMEOUT_MS = 800
/** @description user interaction events used to trigger lazy init earlier */
const ECOMSEND_INTERACTION_EVENTS = ["pointerdown", "keydown", "touchstart"]
/** @description global flag key for emergency immediate loading */
const ECOMSEND_FORCE_IMMEDIATE_FLAG = window.EcomSendApps?.forceImmediateLoad === true
/** @description create main stylesheet node for storefront runtime */
function createEcomSendMainStyleEle() {
const ecomsendMainStyleEle = document.createElement("link")
ecomsendMainStyleEle.rel = "stylesheet"
ecomsendMainStyleEle.href = ECOMSEND_MAIN_STYLE_URL
ecomsendMainStyleEle.dataset.ecomsendTag = "main-style"
return ecomsendMainStyleEle
}
/** @description append runtime stylesheet exactly once */
function ensureEcomSendMainStyleLoaded() {
if (document.querySelector('link[data-ecomsend-tag="main-style"]')) {
return
}
const ecomsendMainStyleEle = createEcomSendMainStyleEle()
document.head.appendChild(ecomsendMainStyleEle)
}
/** @description remove interaction listeners after first lazy-init trigger */
function clearInteractionListeners() {
ECOMSEND_INTERACTION_EVENTS.forEach((eventName) => {
window.removeEventListener(eventName, scheduleMainBundleLoad)
})
}
/** @description run low-priority task via idle callback with timeout fallback */
function scheduleLowPriorityTask(taskRunner, timeoutMs) {
if (window.requestIdleCallback) {
window.requestIdleCallback(() => {
taskRunner()
}, { timeout: timeoutMs })
return
}
window.setTimeout(() => {
taskRunner()
}, timeoutMs)
}
/** @description load main storefront bundle once and keep rollback override */
function loadEcomsendMainBundle() {
if (window.__ecomsendMainBundleLoaded) {
return
}
window.__ecomsendMainBundleLoaded = true
clearInteractionListeners()
/** @description ensure storefront runtime css is loaded together with main bundle */
ensureEcomSendMainStyleLoaded()
const ecomsendMainScriptEle = document.createElement("script")
ecomsendMainScriptEle.src = ECOMSEND_MAIN_SCRIPT_URL
ecomsendMainScriptEle.async = true
ecomsendMainScriptEle.dataset.ecomsendTag = "main-script"
document.body.appendChild(ecomsendMainScriptEle)
}
/** @description schedule heavy bundle with idle-first strategy to reduce main-thread contention */
function scheduleMainBundleLoad() {
if (window.__ecomsendMainBundleLoadScheduled) {
return
}
/** @description dedupe idle scheduling from DOMContentLoaded and first interactions */
window.__ecomsendMainBundleLoadScheduled = true
if (ECOMSEND_FORCE_IMMEDIATE_FLAG) {
loadEcomsendMainBundle()
return
}
scheduleLowPriorityTask(loadEcomsendMainBundle, ECOMSEND_IDLE_TIMEOUT_MS)
}
/** @description cache marketing params for pixel/report flows before heavy bundle starts */
function cacheMarketingParams() {
const urlParams = new URLSearchParams(window.location.search)
const marketingId = urlParams.get("ec_marketing_id")
const ecEmailId = urlParams.get("ec_email_id")
const ecMarketingSign = urlParams.get("ec_marketing_sign")
if (marketingId && window.localStorage) {
window.localStorage.setItem("ec_marketing_id", marketingId)
}
if (ecEmailId && window.localStorage) {
window.localStorage.setItem("ec_email_id", ecEmailId)
}
if (ecMarketingSign && window.localStorage) {
window.localStorage.setItem("ec_marketing_sign", ecMarketingSign)
}
}
try {
cacheMarketingParams()
} catch (e) {}
/** @description inject wasm asset url into shared namespace before main bundle executes */
window.EcomSendApps = window.EcomSendApps || {}
window.EcomSendApps.wasmURL = ECOMSEND_WASM_ASSET_URL
ECOMSEND_INTERACTION_EVENTS.forEach((eventName) => {
window.addEventListener(eventName, scheduleMainBundleLoad, { once: true, passive: true })
})
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", scheduleMainBundleLoad, { once: true })
} else {
scheduleMainBundleLoad()
}
£4.00





















