<div class="oe_structure" id="oe_structure_lp_top"></div><script type="application/ld+json">{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Product",
"name": "Karnataka Spicy Chilli Powder",
"sku": "MS-10007",
"url": "https://www.millerstores.com/karnataka-spicy-chilli-powder",
"image": "https://www.millerstores.com/web/image/product.template/10007/image_1024",
"description": "Very hot, deep red Karnataka chilli powder bought direct from farmers and ground in front of you. No added colour or preservatives, lab-tested. 100 g, 250 g, 500 g.",
"brand": {
"@type": "Brand",
"name": "Miller Stores"
},
"offers": {
"@type": "AggregateOffer",
"priceCurrency": "INR",
"lowPrice": "85.06",
"highPrice": "389.56",
"offerCount": 3,
"availability": "https://schema.org/InStock",
"url": "https://www.millerstores.com/karnataka-spicy-chilli-powder",
"seller": {
"@id": "https://www.millerstores.com/#organization"
}
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://www.millerstores.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Shop",
"item": "https://www.millerstores.com/shop"
},
{
"@type": "ListItem",
"position": 3,
"name": "Karnataka Spicy Chilli Powder",
"item": "https://www.millerstores.com/karnataka-spicy-chilli-powder"
}
]
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How hot is it?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Very hot. Start with half the amount you use of a regular chilli powder. For colour with less heat, mix in some Kashmiri."
}
},
{
"@type": "Question",
"name": "Is anything added?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. It is only dried Karnataka chillies, ground. No added colour, salt, oil or preservatives."
}
},
{
"@type": "Question",
"name": "How is it tested?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Random batches are lab-tested before they go on sale. Ask in store to see the latest report."
}
},
{
"@type": "Question",
"name": "Is the stem removed from the chillies?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. The stems are removed by machine before grinding, which takes out 70–80% of the stem before the chillies are powdered."
}
},
{
"@type": "Question",
"name": "Can I watch it being ground?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. Order in store and we grind it in front of you."
}
},
{
"@type": "Question",
"name": "Why does it clump?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Because there is no anti-caking agent in it. Freshly ground chilli carries its own oil and absorbs humidity. Break it up with a dry spoon - it is a sign of what is absent."
}
},
{
"@type": "Question",
"name": "How long does it keep, and how should I store it?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Best within three to four months, in an airtight, opaque container in a cool, dark cupboard. Avoid the fridge: a cold jar taken in and out of a warm kitchen gathers moisture and the powder cakes. It stays safe longer, but the aroma fades before the colour does."
}
},
{
"@type": "Question",
"name": "Can I bring my own chillies to be milled?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. Only Miller Stores' own chillies go through our mill, so nothing from outside can cross-contaminate what you buy."
}
},
{
"@type": "Question",
"name": "What do I cook with it?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Chammanthi, fry masalas and gravies where you want real heat. For a deep red colour without the burn, blend it with Kashmiri."
}
},
{
"@type": "Question",
"name": "What is it called in other languages?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Mulaku podi (Malayalam), Menasina pudi (Kannada), Milagai thool (Tamil), Kaaram podi (Telugu) and Lal mirch powder (Hindi)."
}
}
]
}
]
}</script><style>#lp-host x-dc{display:none!important;}#lp-host [style*="grid-template-columns"]>*{min-width:0;}#lp-host section[id]{scroll-margin-top:96px;}#lp-host [style*="position:relative"]>image-slot:not([style]){position:absolute;inset:0;width:100%;height:100%;}</style><div id="lp-host"><div id="kcdesk">
<x-dc>
<helmet>
<style>/* vietnamese */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37492") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37493") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37494") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* vietnamese */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 800;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37492") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 800;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37493") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 800;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37494") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* vietnamese */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 900;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37492") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 900;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37493") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 900;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37494") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37472") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37473") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 500;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37472") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 500;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37473") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 600;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37472") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 600;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37473") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37474") format('woff');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37475") format('woff');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37476") format('woff');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37477") format('woff');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37478") format('woff');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37479") format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
</style>
<style> #kcdesk {margin:0;background:#F4EADF;color:#1F0F0B;font-family:'Instrument Sans',sans-serif;-webkit-font-smoothing:antialiased}
#kcdesk a {color:#A31C12}a:hover{color:#6E0F08}
</style>
</helmet>
<div style="max-width:1440px;margin:0 auto">
<section id="buy" style="display:grid;grid-template-columns:1.05fr 1fr;gap:72px;padding:64px 72px 120px;align-items:center">
<div style="aspect-ratio:4/5;position:relative"><img src="https://www.millerstores.com/web/image/product.template/10007/image_1024" alt="Miller Stores Karnataka spicy chilli powder" fetchpriority="high" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:4px" loading="lazy"></div>
<div style="display:flex;flex-direction:column;gap:28px">
<div style="font-size:13px;letter-spacing:0.14em;text-transform:uppercase;color:#A31C12;font-weight:600">From Karnataka farms · Ground in store</div>
<h1 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:104px;line-height:0.9;text-transform:uppercase;color:#A31C12"><span style="position:relative;display:inline-block">Karnataka<span style="position:absolute;top:-0.42em;right:-0.3em;transform:rotate(-9deg);font-size:0.3em;font-weight:900;letter-spacing:0.08em;line-height:1;padding:0.12em 0.35em;border:3px solid #1F0F0B;border-radius:4px;color:#1F0F0B;background:#F4EADF;box-shadow:0 0 0 2px #F4EADF inset">Spicy</span></span><br>Chilli Powder</h1>
<p style="margin:0;font-size:19px;line-height:1.55;max-width:34em;text-wrap:pretty">Very hot, deep red, and nothing else. Whole dried chillies bought straight from Karnataka farmers, ground in front of you. No added colour, no preservatives, lab-tested.</p>
<div style="display:grid;grid-template-columns:auto 1fr;gap:12px 20px;align-items:center;max-width:420px">
<div style="font-size:14px;font-weight:600">Heat</div>
<div style="display:flex;gap:6px"><sc-for list="{{ heroHeat }}" as="s" hint-placeholder-count="5"><sc-if value="{{ s.on }}"><div style="flex:1;height:10px;border-radius:2px;background:#A31C12"></div></sc-if><sc-if value="{{ s.off }}"><div style="flex:1;height:10px;border-radius:2px;background:#E0CFBF"></div></sc-if></sc-for></div>
<div style="font-size:14px;font-weight:600">Colour</div>
<div style="display:flex;gap:6px"><sc-for list="{{ heroColour }}" as="s" hint-placeholder-count="5"><sc-if value="{{ s.on }}"><div style="flex:1;height:10px;border-radius:2px;background:#C8341F"></div></sc-if><sc-if value="{{ s.off }}"><div style="flex:1;height:10px;border-radius:2px;background:#E0CFBF"></div></sc-if></sc-for></div>
</div>
<div style="display:flex;flex-direction:column;gap:12px">
<div style="font-size:14px;font-weight:600">Size</div>
<div style="display:flex;gap:12px">
<sc-for list="{{ sizes }}" as="z" hint-placeholder-count="3">
<sc-if value="{{ z.active }}"><button sc-camel-on-click="{{ z.pick }}" style="flex:1;padding:16px 12px;border:2px solid #1F0F0B;background:#1F0F0B;color:#F4EADF;border-radius:6px;font:inherit;cursor:pointer;display:flex;flex-direction:column;gap:4px;align-items:center"><span style="font-weight:600;font-size:17px">{{ z.label }}</span><span style="font-size:14px">₹{{ z.price }}</span></button></sc-if>
<sc-if value="{{ z.inactive }}"><button sc-camel-on-click="{{ z.pick }}" style="flex:1;padding:16px 12px;border:2px solid #D2BCA8;background:transparent;color:#1F0F0B;border-radius:6px;font:inherit;cursor:pointer;display:flex;flex-direction:column;gap:4px;align-items:center" style-hover="border-color:#1F0F0B"><span style="font-weight:600;font-size:17px">{{ z.label }}</span><span style="font-size:14px">₹{{ z.price }}</span></button></sc-if>
</sc-for>
</div>
</div>
<div style="display:flex;gap:12px;align-items:stretch">
<div style="display:flex;align-items:center;border:2px solid #D2BCA8;border-radius:6px">
<button sc-camel-on-click="{{ dec }}" style="width:48px;height:56px;border:0;background:transparent;font-size:22px;cursor:pointer">−</button>
<div style="width:32px;text-align:center;font-weight:600">{{ qty }}</div>
<button sc-camel-on-click="{{ inc }}" style="width:48px;height:56px;border:0;background:transparent;font-size:22px;cursor:pointer">+</button>
</div>
<button sc-camel-on-click="{{ addMain }}" style="flex:1;border:0;border-radius:6px;background:#A31C12;color:#FFF6EE;font:inherit;font-weight:600;font-size:17px;cursor:pointer" style-hover="background:#850F07">{{ addLabel }}</button><button sc-camel-on-click="{{ buyNow }}" style="flex:0 0 auto;min-height:56px;padding:0 28px;border:2px solid #1F0F0B;border-radius:6px;background:transparent;color:#1F0F0B;font:inherit;font-weight:600;font-size:17px;cursor:pointer">{{ buyLabel }}</button>
</div>
<div style="font-size:14px;color:#5E4A40">Ground fresh when you order in store · Sealed same day</div>
</div>
</section>
<section id="purity" style="background:#1F0F0B;color:#F4EADF;padding:120px 72px">
<div style="display:grid;grid-template-columns:1fr 1fr;gap:72px;align-items:start">
<div style="display:flex;flex-direction:column;gap:24px">
<div style="font-size:13px;letter-spacing:0.14em;text-transform:uppercase;color:#F07A5A;font-weight:600">The water test</div>
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:72px;line-height:0.95;text-transform:uppercase">Our red comes from the chilli. Not a packet.</h2>
<p style="margin:0;font-size:18px;line-height:1.6;color:#D9C7B8;max-width:32em;text-wrap:pretty">Some powders get their colour from added dye or fillers. Check any brand at home: sprinkle a spoon on a glass of water.</p>
</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:20px">
<div style="border:1px solid #4A2E25;border-radius:6px;padding:28px;display:flex;flex-direction:column;gap:16px">
<div style="font-size:13px;letter-spacing:0.1em;text-transform:uppercase;color:#A89284">Coloured powder</div>
<div style="font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:32px;line-height:1">Red streaks spread fast</div>
<p style="margin:0;font-size:16px;line-height:1.55;color:#D9C7B8">Dye bleeds into the water within seconds. Grit sinks to the bottom.</p>
</div>
<div style="background:#A31C12;border-radius:6px;padding:28px;display:flex;flex-direction:column;gap:16px">
<div style="font-size:13px;letter-spacing:0.1em;text-transform:uppercase;color:#FFD9CC">Miller Stores</div>
<div style="font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:32px;line-height:1">Floats, settles slowly</div>
<p style="margin:0;font-size:16px;line-height:1.55;color:#FFE9E1">Water tints gently over time. No streaks, no grit.</p>
</div>
</div>
</div>
</section>
<section style="padding:120px 72px;display:grid;grid-template-columns:1fr 1fr;gap:72px;align-items:center">
<div style="aspect-ratio:4/3;position:relative"><img src="https://www.millerstores.com/web/image/37521" alt="Miller Stores staff pouring whole dried red chillies into the grinder, with fresh chilli powder in the bowl below" loading="lazy" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:4px"></div>
<div style="display:flex;flex-direction:column;gap:24px">
<div style="font-size:13px;letter-spacing:0.14em;text-transform:uppercase;color:#A31C12;font-weight:600">Ground in front of you</div>
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">See the whole chillies go in.</h2>
<p style="margin:0;font-size:18px;line-height:1.6;max-width:32em;text-wrap:pretty">Nothing happens out of sight. You watch the dried chillies go into the grinder, and the powder that comes out goes into your pack.</p>
</div>
</section>
<section style="padding:0 72px 120px">
<h2 style="margin:0 0 40px;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">Ours vs. typical packaged powder</h2>
<div style="border-top:2px solid #1F0F0B">
<div style="display:grid;grid-template-columns:1.2fr 1fr 1fr;padding:18px 0;border-bottom:1px solid #D2BCA8;font-size:13px;letter-spacing:0.1em;text-transform:uppercase;font-weight:600">
<div></div><div style="color:#A31C12">Miller Stores</div><div style="color:#5E4A40">Typical brand</div>
</div>
<sc-for list="{{ compare }}" as="r" hint-placeholder-count="6">
<div style="display:grid;grid-template-columns:1.2fr 1fr 1fr;padding:22px 0;border-bottom:1px solid #D2BCA8;font-size:18px">
<div style="font-weight:600">{{ r.k }}</div><div>{{ r.us }}</div><div style="color:#5E4A40">{{ r.them }}</div>
</div>
</sc-for>
</div>
</section>
<section style="background:#EADBCB;padding:120px 72px;display:grid;grid-template-columns:1fr 1fr;gap:72px;align-items:center">
<div style="display:flex;flex-direction:column;gap:24px">
<div style="font-size:13px;letter-spacing:0.14em;text-transform:uppercase;color:#A31C12;font-weight:600">Farm to grinder</div>
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">Bought direct. Ground in front of you.</h2>
<p style="margin:0;font-size:18px;line-height:1.6;max-width:32em;text-wrap:pretty">We buy whole dried chillies straight from Karnataka farmers, with no traders in between, and grind them in front of you at our stores. Random batches are lab-tested.</p>
</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:20px">
<div style="aspect-ratio:1;position:relative"><img src="https://www.millerstores.com/web/image/37522" alt="Farmers standing in a chilli field" loading="lazy" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:4px"></div>
<div style="aspect-ratio:1;position:relative"><img src="https://www.millerstores.com/web/image/37523" alt="A ripe red chilli held on the plant in the field" loading="lazy" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:4px"></div>
</div>
</section>
<section id="range" style="padding:120px 72px">
<div style="display:flex;justify-content:space-between;align-items:end;gap:40px;margin-bottom:48px">
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">Pick your heat</h2>
<p style="margin:0;font-size:17px;color:#5E4A40;max-width:26em">Three chillies, ground the same way. Mix them to get the heat and colour you like.</p>
</div>
<div style="display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px">
<sc-for list="{{ range }}" as="c" hint-placeholder-count="3">
<div style="position:relative;cursor:pointer;transition:border-color .15s;border:1px solid #D2BCA8;border-radius:6px;padding:20px;display:flex;flex-direction:column;gap:18px;background:#FBF4EC" style-hover="border-color:#A31C12"><a sc-camel-href="{{ c.href }}" aria-label="{{ c.linkLabel }}" style="position:absolute;inset:0;z-index:1;border-radius:6px"></a>
<div style="aspect-ratio:4/3;position:relative;overflow:hidden;border-radius:4px"><img sc-camel-src="{{ c.img }}" alt="{{ c.alt }}" loading="eager" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover"></div>
<div style="display:flex;justify-content:space-between;align-items:baseline;gap:12px">
<div style="position:relative;display:inline-block;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:36px;text-transform:uppercase;line-height:1">{{ c.name }}<sc-if value="{{ c.current }}"><span style="position:absolute;top:-0.55em;right:-0.9em;transform:rotate(-9deg);font-size:0.4em;font-weight:900;letter-spacing:0.08em;padding:0.15em 0.35em;border:2px solid #A31C12;border-radius:3px;color:#A31C12;background:#FBF4EC">{{ c.stamp }}</span></sc-if></div>
<sc-if value="{{ c.current }}"><div style="font-size:12px;letter-spacing:0.08em;text-transform:uppercase;color:#A31C12;font-weight:600">This page</div></sc-if>
</div>
<div style="font-size:16px;color:#5E4A40">{{ c.note }}</div>
<div style="display:grid;grid-template-columns:64px 1fr;gap:10px 14px;align-items:center">
<div style="font-size:13px;font-weight:600">Heat</div>
<div style="display:flex;gap:4px"><sc-for list="{{ c.heat }}" as="s"><sc-if value="{{ s.on }}"><div style="flex:1;height:8px;border-radius:2px;background:#A31C12"></div></sc-if><sc-if value="{{ s.off }}"><div style="flex:1;height:8px;border-radius:2px;background:#E0CFBF"></div></sc-if></sc-for></div>
<div style="font-size:13px;font-weight:600">Colour</div>
<div style="display:flex;gap:4px"><sc-for list="{{ c.colour }}" as="s"><sc-if value="{{ s.on }}"><div style="flex:1;height:8px;border-radius:2px;background:#C8341F"></div></sc-if><sc-if value="{{ s.off }}"><div style="flex:1;height:8px;border-radius:2px;background:#E0CFBF"></div></sc-if></sc-for></div>
</div>
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:auto;padding-top:8px">
<div style="font-size:15px">100 g · <strong>₹{{ c.priceText }}</strong></div>
<button sc-camel-on-click="{{ c.add }}" style="position:relative;z-index:2;border:0;border-radius:999px;background:#1F0F0B;color:#F4EADF;padding:12px 20px;font:inherit;font-weight:600;cursor:pointer" style-hover="background:#A31C12">{{ c.btn }}</button>
</div>
</div>
</sc-for>
</div>
</section>
<section id="faq" style="padding:0 72px 120px;display:grid;grid-template-columns:1fr 1.6fr;gap:72px">
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">Questions</h2>
<div style="border-top:2px solid #1F0F0B">
<sc-for list="{{ faqs }}" as="f" hint-placeholder-count="5">
<div style="border-bottom:1px solid #D2BCA8">
<button sc-camel-on-click="{{ f.toggle }}" style="width:100%;display:flex;justify-content:space-between;align-items:center;gap:24px;padding:22px 0;border:0;background:transparent;font:inherit;font-size:19px;font-weight:600;text-align:left;cursor:pointer;color:#1F0F0B"><span>{{ f.q }}</span><span style="font-size:24px;color:#A31C12">{{ f.sign }}</span></button>
<sc-if value="{{ f.open }}"><p style="margin:0 0 22px;font-size:17px;line-height:1.6;color:#5E4A40;max-width:40em">{{ f.a }}</p></sc-if>
</div>
</sc-for>
</div>
</section>
<footer style="background:#A31C12;color:#FFF6EE;padding:72px;display:flex;justify-content:space-between;align-items:end;gap:40px">
<div style="font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:88px;line-height:0.9;text-transform:uppercase">Miller<br>Stores</div>
<div style="display:flex;flex-direction:column;gap:8px;font-size:16px;text-align:right">
<div>Ground in front of you · Karnataka chillies</div>
<div>Visit the store or call to order</div>
</div>
</footer>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script="" data-props="{"price100":{"editor":"int","default":60,"tsType":"number","section":"Prices (₹)"},"price250":{"editor":"int","default":140,"tsType":"number","section":"Prices (₹)"},"price500":{"editor":"int","default":260,"tsType":"number","section":"Prices (₹)"},"priceKashmiri":{"editor":"int","default":70,"tsType":"number","section":"Prices (₹)"},"priceGuntur":{"editor":"int","default":50,"tsType":"number","section":"Prices (₹)"}}">
class Component extends DCLogic {
state = { size: '250', qty: 1, cart: {}, faq: -1, added: '', busy: '', err: '', buying: false };
bars(n) { return [1,2,3,4,5].map(i => ({ on: i <= n, off: i > n })); }
pids = {"karnataka-100": 3455, "karnataka-250": 3457, "karnataka-500": 3456, "kashmiri-100": 3399, "guntur-100": 4806};
money(n) { const v = Math.round(n * 100) / 100; return Number.isInteger(v) ? String(v) : v.toFixed(2); }
cartLines = {};
cartReady = false;
cartBoot() {
if (this._cartBoot) return;
this._cartBoot = true;
setTimeout(() => this.syncCart(), 0);
window.addEventListener('pageshow', e => { if (e.persisted) this.syncCart(); });
}
syncCart() {
fetch('/shop/cart', { credentials: 'same-origin' }).then(r => r.text()).then(h => {
const d = new DOMParser().parseFromString(h, 'text/html'), m = {};
d.querySelectorAll('input.js_quantity[data-product-id]').forEach(i => {
const p = i.getAttribute('data-product-id');
(m[p] = m[p] || []).push({ line: parseInt(i.getAttribute('data-line-id'), 10), qty: parseFloat(i.value) || 0 });
});
this.cartLines = m; this.cartReady = true; this.setState({ rev: Date.now() });
}).catch(() => { this.cartReady = true; this.setState({ rev: Date.now() }); });
}
inCart(pid) { return (this.cartLines[pid] || []).reduce((a, l) => a + l.qty, 0); }
cartPost(params) {
return fetch('/shop/cart/update_json', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-CSRFToken': (window.odoo && odoo.csrf_token) || '' },
body: JSON.stringify({ jsonrpc: '2.0', method: 'call', params })
}).then(r => r.json()).then(res => {
const o = res && res.result;
if (!o || res.error) throw new Error('cart');
if (typeof o.cart_quantity === 'number') {
document.querySelectorAll('.my_cart_quantity').forEach(el => {
el.textContent = String(o.cart_quantity);
const w = el.closest('.o_wsale_my_cart, [class*="my_cart"]');
if (w && o.cart_quantity) w.classList.remove('d-none');
});
}
return o;
});
}
step(pid, delta) {
if (!pid || this._busy) return null;
if (delta < 0 && !this.inCart(pid)) return null;
const ls = this.cartLines[pid] || [];
const t = delta > 0 ? ls[0] : ls.slice().reverse().find(l => l.qty > 0);
const params = { product_id: pid, add_qty: delta };
if (t) params.line_id = t.line;
this._busy = true;
this.setState({ busy: String(pid), err: '' });
return this.cartPost(params).then(o => {
const lid = o.line_id || (t && t.line);
let arr = (this.cartLines[pid] || []).slice();
if (lid && typeof o.quantity === 'number') {
const i = arr.findIndex(l => l.line === lid);
if (i >= 0) arr[i] = { line: lid, qty: o.quantity }; else arr.push({ line: lid, qty: o.quantity });
}
this.cartLines = { ...this.cartLines, [pid]: arr.filter(l => l.qty > 0) };
this._busy = false;
this.setState({ busy: '', added: delta > 0 ? String(pid) : '' });
clearTimeout(this._at); this._at = setTimeout(() => this.setState({ added: '' }), 1600);
return true;
}).catch(() => {
this._busy = false;
this.setState({ busy: '', err: String(pid) });
clearTimeout(this._et); this._et = setTimeout(() => this.setState({ err: '' }), 2400);
return false;
});
}
buy(pid) {
const go = () => { this.setState({ buying: true }); window.location.href = '/shop/checkout?express=1'; };
if (this.inCart(pid)) { go(); return; }
const p = this.step(pid, 1);
if (p) p.then(ok => { if (ok) go(); });
}
renderVals() {
const P = this.props;
const prices = { '100': 85.06, '250': 221.56, '500': 389.56 };
const s = this.state;
const items = Object.values(s.cart);
const mainKey = 'karnataka-' + s.size;
const pidSel = this.pids[mainKey]; const n = this.inCart(pidSel); this.cartBoot();
const range = [{"id": "karnataka", "name": "Karnataka", "note": "Very hot, deep red colour", "h": 5, "c": 4, "price": 85.06, "stamp": "Spicy", "url": "/karnataka-spicy-chilli-powder", "current": true, "href": "#buy", "linkLabel": "Choose a size of Karnataka chilli powder"}, {"id": "kashmiri", "name": "Kashmiri", "note": "Very low heat, bright red colour", "h": 1, "c": 5, "price": 199.5, "stamp": "Mild", "url": "/kashmiri-chilli-powder", "current": false, "href": "/kashmiri-chilli-powder", "linkLabel": "View Kashmiri chilli powder"}, {"id": "guntur", "name": "Guntur", "note": "Everyday heat, lighter colour", "h": 3, "c": 2, "price": 73.5, "stamp": "Hot", "url": "/guntur-chilli-powder", "current": false, "href": "/guntur-chilli-powder", "linkLabel": "View Guntur chilli powder"}].map(c => {
const key = c.id + '-100';
return { ...c, img: ({ karnataka: '/web/image/product.template/10007/image_512', kashmiri: '/web/image/product.template/9974/image_512', guntur: '/web/image/product.template/10085/image_512' })[c.id], alt: c.name + ' chilli powder', priceText: this.money(c.price), slot: 'chilli-range-' + c.id, ph: 'Drop ' + c.name + ' chilli photo', heat: this.bars(c.h), colour: this.bars(c.c),
btn: s.err === String(this.pids[key]) ? 'Retry' : s.busy === String(this.pids[key]) ? 'Adding…' : this.inCart(this.pids[key]) ? 'Add (' + this.inCart(this.pids[key]) + ' in cart)' : 'Add', add: () => this.step(this.pids[key], 1) };
});
const faqs = [["How hot is it?", "Very hot. Start with half the amount you use of a regular chilli powder. For colour with less heat, mix in some Kashmiri."], ["Is anything added?", "No. It is only dried Karnataka chillies, ground. No added colour, salt, oil or preservatives."], ["How is it tested?", "Random batches are lab-tested before they go on sale. Ask in store to see the latest report."], ["Is the stem removed from the chillies?", "Yes. The stems are removed by machine before grinding, which takes out 70–80% of the stem before the chillies are powdered."], ["Can I watch it being ground?", "Yes. Order in store and we grind it in front of you."], ["Why does it clump?", "Because there is no anti-caking agent in it. Freshly ground chilli carries its own oil and absorbs humidity. Break it up with a dry spoon - it is a sign of what is absent."], ["How long does it keep, and how should I store it?", "Best within three to four months, in an airtight, opaque container in a cool, dark cupboard. Avoid the fridge: a cold jar taken in and out of a warm kitchen gathers moisture and the powder cakes. It stays safe longer, but the aroma fades before the colour does."], ["Can I bring my own chillies to be milled?", "No. Only Miller Stores' own chillies go through our mill, so nothing from outside can cross-contaminate what you buy."], ["What do I cook with it?", "Chammanthi, fry masalas and gravies where you want real heat. For a deep red colour without the burn, blend it with Kashmiri."], ["What is it called in other languages?", "Mulaku podi (Malayalam), Menasina pudi (Kannada), Milagai thool (Tamil), Kaaram podi (Telugu) and Lal mirch powder (Hindi)."]].map(([q, a], i) => ({ q, a, open: s.faq === i, sign: s.faq === i ? '−' : '+', toggle: () => this.setState({ faq: s.faq === i ? -1 : i }) }));
return {
cartCount: items.reduce((a, b) => a + b.n, 0),
cartTotal: items.reduce((a, b) => a + b.n * b.price, 0),
heroHeat: this.bars(5), heroColour: this.bars(4),
sizes: ['100', '250', '500'].map(z => ({ label: z + ' g', price: this.money(prices[z]), active: s.size === z, inactive: s.size !== z, pick: () => this.setState({ size: z }) })),
qty: this.cartReady ? n : '–',
inc: () => this.step(pidSel, 1),
dec: () => this.step(pidSel, -1),
addMain: () => n ? (window.location.href = '/shop/cart') : this.step(pidSel, 1),
buyNow: () => this.buy(pidSel),
buyLabel: s.buying ? 'Going to checkout…' : 'Buy now',
addLabel: this.state.err === String(pidSel) ? 'Could not update cart. Try again' : this.state.busy === String(pidSel) ? 'Updating…' : n ? 'View cart (' + n + ')' : 'Add to cart · ₹' + this.money(prices[s.size]),
compare: [{"k": "Colour from", "us": "The chilli itself", "them": "Often boosted with added colour"}, {"k": "Preservatives", "us": "None", "them": "Sometimes added"}, {"k": "Where it’s ground", "us": "In front of you", "them": "Out of sight, months earlier"}, {"k": "Sourcing", "us": "Direct from Karnataka farmers", "them": "Through traders, mixed origins"}, {"k": "Testing", "us": "Random batch lab testing", "them": "Rarely shared"}, {"k": "Heat", "us": "Very hot, consistent", "them": "Varies pack to pack"}],
range, faqs
};
}
}
</script>
</div></div><template id="lp-desk-tpl"><div id="kcdesk">
<x-dc>
<helmet>
<style>/* vietnamese */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37492") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37493") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37494") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* vietnamese */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 800;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37492") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 800;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37493") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 800;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37494") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* vietnamese */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 900;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37492") format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 900;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37493") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Big Shoulders Display';
font-style: normal;
font-weight: 900;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37494") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37472") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 400;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37473") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 500;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37472") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 500;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37473") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 600;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37472") format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Instrument Sans';
font-style: normal;
font-weight: 600;
font-stretch: 100%;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37473") format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37474") format('woff');
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37475") format('woff');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* greek */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37476") format('woff');
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* vietnamese */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37477") format('woff');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37478") format('woff');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'JetBrains Mono';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("https://www.millerstores.com/web/content/37479") format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
</style>
<style> #kcdesk {margin:0;background:#F4EADF;color:#1F0F0B;font-family:'Instrument Sans',sans-serif;-webkit-font-smoothing:antialiased}
#kcdesk a {color:#A31C12}a:hover{color:#6E0F08}
</style>
</helmet>
<div style="max-width:1440px;margin:0 auto">
<section id="buy" style="display:grid;grid-template-columns:1.05fr 1fr;gap:72px;padding:64px 72px 120px;align-items:center">
<div style="aspect-ratio:4/5;position:relative"><img src="https://www.millerstores.com/web/image/product.template/10007/image_1024" alt="Miller Stores Karnataka spicy chilli powder" fetchpriority="high" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:4px" loading="lazy"></div>
<div style="display:flex;flex-direction:column;gap:28px">
<div style="font-size:13px;letter-spacing:0.14em;text-transform:uppercase;color:#A31C12;font-weight:600">From Karnataka farms · Ground in store</div>
<h1 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:104px;line-height:0.9;text-transform:uppercase;color:#A31C12"><span style="position:relative;display:inline-block">Karnataka<span style="position:absolute;top:-0.42em;right:-0.3em;transform:rotate(-9deg);font-size:0.3em;font-weight:900;letter-spacing:0.08em;line-height:1;padding:0.12em 0.35em;border:3px solid #1F0F0B;border-radius:4px;color:#1F0F0B;background:#F4EADF;box-shadow:0 0 0 2px #F4EADF inset">Spicy</span></span><br>Chilli Powder</h1>
<p style="margin:0;font-size:19px;line-height:1.55;max-width:34em;text-wrap:pretty">Very hot, deep red, and nothing else. Whole dried chillies bought straight from Karnataka farmers, ground in front of you. No added colour, no preservatives, lab-tested.</p>
<div style="display:grid;grid-template-columns:auto 1fr;gap:12px 20px;align-items:center;max-width:420px">
<div style="font-size:14px;font-weight:600">Heat</div>
<div style="display:flex;gap:6px"><sc-for list="{{ heroHeat }}" as="s" hint-placeholder-count="5"><sc-if value="{{ s.on }}"><div style="flex:1;height:10px;border-radius:2px;background:#A31C12"></div></sc-if><sc-if value="{{ s.off }}"><div style="flex:1;height:10px;border-radius:2px;background:#E0CFBF"></div></sc-if></sc-for></div>
<div style="font-size:14px;font-weight:600">Colour</div>
<div style="display:flex;gap:6px"><sc-for list="{{ heroColour }}" as="s" hint-placeholder-count="5"><sc-if value="{{ s.on }}"><div style="flex:1;height:10px;border-radius:2px;background:#C8341F"></div></sc-if><sc-if value="{{ s.off }}"><div style="flex:1;height:10px;border-radius:2px;background:#E0CFBF"></div></sc-if></sc-for></div>
</div>
<div style="display:flex;flex-direction:column;gap:12px">
<div style="font-size:14px;font-weight:600">Size</div>
<div style="display:flex;gap:12px">
<sc-for list="{{ sizes }}" as="z" hint-placeholder-count="3">
<sc-if value="{{ z.active }}"><button sc-camel-on-click="{{ z.pick }}" style="flex:1;padding:16px 12px;border:2px solid #1F0F0B;background:#1F0F0B;color:#F4EADF;border-radius:6px;font:inherit;cursor:pointer;display:flex;flex-direction:column;gap:4px;align-items:center"><span style="font-weight:600;font-size:17px">{{ z.label }}</span><span style="font-size:14px">₹{{ z.price }}</span></button></sc-if>
<sc-if value="{{ z.inactive }}"><button sc-camel-on-click="{{ z.pick }}" style="flex:1;padding:16px 12px;border:2px solid #D2BCA8;background:transparent;color:#1F0F0B;border-radius:6px;font:inherit;cursor:pointer;display:flex;flex-direction:column;gap:4px;align-items:center" style-hover="border-color:#1F0F0B"><span style="font-weight:600;font-size:17px">{{ z.label }}</span><span style="font-size:14px">₹{{ z.price }}</span></button></sc-if>
</sc-for>
</div>
</div>
<div style="display:flex;gap:12px;align-items:stretch">
<div style="display:flex;align-items:center;border:2px solid #D2BCA8;border-radius:6px">
<button sc-camel-on-click="{{ dec }}" style="width:48px;height:56px;border:0;background:transparent;font-size:22px;cursor:pointer">−</button>
<div style="width:32px;text-align:center;font-weight:600">{{ qty }}</div>
<button sc-camel-on-click="{{ inc }}" style="width:48px;height:56px;border:0;background:transparent;font-size:22px;cursor:pointer">+</button>
</div>
<button sc-camel-on-click="{{ addMain }}" style="flex:1;border:0;border-radius:6px;background:#A31C12;color:#FFF6EE;font:inherit;font-weight:600;font-size:17px;cursor:pointer" style-hover="background:#850F07">{{ addLabel }}</button><button sc-camel-on-click="{{ buyNow }}" style="flex:0 0 auto;min-height:56px;padding:0 28px;border:2px solid #1F0F0B;border-radius:6px;background:transparent;color:#1F0F0B;font:inherit;font-weight:600;font-size:17px;cursor:pointer">{{ buyLabel }}</button>
</div>
<div style="font-size:14px;color:#5E4A40">Ground fresh when you order in store · Sealed same day</div>
</div>
</section>
<section id="purity" style="background:#1F0F0B;color:#F4EADF;padding:120px 72px">
<div style="display:grid;grid-template-columns:1fr 1fr;gap:72px;align-items:start">
<div style="display:flex;flex-direction:column;gap:24px">
<div style="font-size:13px;letter-spacing:0.14em;text-transform:uppercase;color:#F07A5A;font-weight:600">The water test</div>
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:72px;line-height:0.95;text-transform:uppercase">Our red comes from the chilli. Not a packet.</h2>
<p style="margin:0;font-size:18px;line-height:1.6;color:#D9C7B8;max-width:32em;text-wrap:pretty">Some powders get their colour from added dye or fillers. Check any brand at home: sprinkle a spoon on a glass of water.</p>
</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:20px">
<div style="border:1px solid #4A2E25;border-radius:6px;padding:28px;display:flex;flex-direction:column;gap:16px">
<div style="font-size:13px;letter-spacing:0.1em;text-transform:uppercase;color:#A89284">Coloured powder</div>
<div style="font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:32px;line-height:1">Red streaks spread fast</div>
<p style="margin:0;font-size:16px;line-height:1.55;color:#D9C7B8">Dye bleeds into the water within seconds. Grit sinks to the bottom.</p>
</div>
<div style="background:#A31C12;border-radius:6px;padding:28px;display:flex;flex-direction:column;gap:16px">
<div style="font-size:13px;letter-spacing:0.1em;text-transform:uppercase;color:#FFD9CC">Miller Stores</div>
<div style="font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:32px;line-height:1">Floats, settles slowly</div>
<p style="margin:0;font-size:16px;line-height:1.55;color:#FFE9E1">Water tints gently over time. No streaks, no grit.</p>
</div>
</div>
</div>
</section>
<section style="padding:120px 72px;display:grid;grid-template-columns:1fr 1fr;gap:72px;align-items:center">
<div style="aspect-ratio:4/3;position:relative"><img src="https://www.millerstores.com/web/image/37521" alt="Miller Stores staff pouring whole dried red chillies into the grinder, with fresh chilli powder in the bowl below" loading="lazy" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:4px"></div>
<div style="display:flex;flex-direction:column;gap:24px">
<div style="font-size:13px;letter-spacing:0.14em;text-transform:uppercase;color:#A31C12;font-weight:600">Ground in front of you</div>
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">See the whole chillies go in.</h2>
<p style="margin:0;font-size:18px;line-height:1.6;max-width:32em;text-wrap:pretty">Nothing happens out of sight. You watch the dried chillies go into the grinder, and the powder that comes out goes into your pack.</p>
</div>
</section>
<section style="padding:0 72px 120px">
<h2 style="margin:0 0 40px;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">Ours vs. typical packaged powder</h2>
<div style="border-top:2px solid #1F0F0B">
<div style="display:grid;grid-template-columns:1.2fr 1fr 1fr;padding:18px 0;border-bottom:1px solid #D2BCA8;font-size:13px;letter-spacing:0.1em;text-transform:uppercase;font-weight:600">
<div></div><div style="color:#A31C12">Miller Stores</div><div style="color:#5E4A40">Typical brand</div>
</div>
<sc-for list="{{ compare }}" as="r" hint-placeholder-count="6">
<div style="display:grid;grid-template-columns:1.2fr 1fr 1fr;padding:22px 0;border-bottom:1px solid #D2BCA8;font-size:18px">
<div style="font-weight:600">{{ r.k }}</div><div>{{ r.us }}</div><div style="color:#5E4A40">{{ r.them }}</div>
</div>
</sc-for>
</div>
</section>
<section style="background:#EADBCB;padding:120px 72px;display:grid;grid-template-columns:1fr 1fr;gap:72px;align-items:center">
<div style="display:flex;flex-direction:column;gap:24px">
<div style="font-size:13px;letter-spacing:0.14em;text-transform:uppercase;color:#A31C12;font-weight:600">Farm to grinder</div>
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">Bought direct. Ground in front of you.</h2>
<p style="margin:0;font-size:18px;line-height:1.6;max-width:32em;text-wrap:pretty">We buy whole dried chillies straight from Karnataka farmers, with no traders in between, and grind them in front of you at our stores. Random batches are lab-tested.</p>
</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:20px">
<div style="aspect-ratio:1;position:relative"><img src="https://www.millerstores.com/web/image/37522" alt="Farmers standing in a chilli field" loading="lazy" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:4px"></div>
<div style="aspect-ratio:1;position:relative"><img src="https://www.millerstores.com/web/image/37523" alt="A ripe red chilli held on the plant in the field" loading="lazy" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:4px"></div>
</div>
</section>
<section id="range" style="padding:120px 72px">
<div style="display:flex;justify-content:space-between;align-items:end;gap:40px;margin-bottom:48px">
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">Pick your heat</h2>
<p style="margin:0;font-size:17px;color:#5E4A40;max-width:26em">Three chillies, ground the same way. Mix them to get the heat and colour you like.</p>
</div>
<div style="display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px">
<sc-for list="{{ range }}" as="c" hint-placeholder-count="3">
<div style="position:relative;cursor:pointer;transition:border-color .15s;border:1px solid #D2BCA8;border-radius:6px;padding:20px;display:flex;flex-direction:column;gap:18px;background:#FBF4EC" style-hover="border-color:#A31C12"><a sc-camel-href="{{ c.href }}" aria-label="{{ c.linkLabel }}" style="position:absolute;inset:0;z-index:1;border-radius:6px"></a>
<div style="aspect-ratio:4/3;position:relative;overflow:hidden;border-radius:4px"><img sc-camel-src="{{ c.img }}" alt="{{ c.alt }}" loading="eager" decoding="async" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover"></div>
<div style="display:flex;justify-content:space-between;align-items:baseline;gap:12px">
<div style="position:relative;display:inline-block;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:36px;text-transform:uppercase;line-height:1">{{ c.name }}<sc-if value="{{ c.current }}"><span style="position:absolute;top:-0.55em;right:-0.9em;transform:rotate(-9deg);font-size:0.4em;font-weight:900;letter-spacing:0.08em;padding:0.15em 0.35em;border:2px solid #A31C12;border-radius:3px;color:#A31C12;background:#FBF4EC">{{ c.stamp }}</span></sc-if></div>
<sc-if value="{{ c.current }}"><div style="font-size:12px;letter-spacing:0.08em;text-transform:uppercase;color:#A31C12;font-weight:600">This page</div></sc-if>
</div>
<div style="font-size:16px;color:#5E4A40">{{ c.note }}</div>
<div style="display:grid;grid-template-columns:64px 1fr;gap:10px 14px;align-items:center">
<div style="font-size:13px;font-weight:600">Heat</div>
<div style="display:flex;gap:4px"><sc-for list="{{ c.heat }}" as="s"><sc-if value="{{ s.on }}"><div style="flex:1;height:8px;border-radius:2px;background:#A31C12"></div></sc-if><sc-if value="{{ s.off }}"><div style="flex:1;height:8px;border-radius:2px;background:#E0CFBF"></div></sc-if></sc-for></div>
<div style="font-size:13px;font-weight:600">Colour</div>
<div style="display:flex;gap:4px"><sc-for list="{{ c.colour }}" as="s"><sc-if value="{{ s.on }}"><div style="flex:1;height:8px;border-radius:2px;background:#C8341F"></div></sc-if><sc-if value="{{ s.off }}"><div style="flex:1;height:8px;border-radius:2px;background:#E0CFBF"></div></sc-if></sc-for></div>
</div>
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:auto;padding-top:8px">
<div style="font-size:15px">100 g · <strong>₹{{ c.priceText }}</strong></div>
<button sc-camel-on-click="{{ c.add }}" style="position:relative;z-index:2;border:0;border-radius:999px;background:#1F0F0B;color:#F4EADF;padding:12px 20px;font:inherit;font-weight:600;cursor:pointer" style-hover="background:#A31C12">{{ c.btn }}</button>
</div>
</div>
</sc-for>
</div>
</section>
<section id="faq" style="padding:0 72px 120px;display:grid;grid-template-columns:1fr 1.6fr;gap:72px">
<h2 style="margin:0;font-family:'Big Shoulders Display',sans-serif;font-weight:800;font-size:64px;line-height:0.95;text-transform:uppercase">Questions</h2>
<div style="border-top:2px solid #1F0F0B">
<sc-for list="{{ faqs }}" as="f" hint-placeholder-count="5">
<div style="border-bottom:1px solid #D2BCA8">
<button sc-camel-on-click="{{ f.toggle }}" style="width:100%;display:flex;justify-content:space-between;align-items:center;gap:24px;padding:22px 0;border:0;background:transparent;font:inherit;font-size:19px;font-weight:600;text-align:left;cursor:pointer;color:#1F0F0B"><span>{{ f.q }}</span><span style="font-size:24px;color:#A31C12">{{ f.sign }}</span></button>
<sc-if value="{{ f.open }}"><p style="margin:0 0 22px;font-size:17px;line-height:1.6;color:#5E4A40;max-width:40em">{{ f.a }}</p></sc-if>
</div>
</sc-for>
</div>
</section>
<footer style="background:#A31C12;color:#FFF6EE;padding:72px;display:flex;justify-content:space-between;align-items:end;gap:40px">
<div style="font-family:'Big Shoulders Display',sans-serif;font-weight:900;font-size:88px;line-height:0.9;text-transform:uppercase">Miller<br>Stores</div>
<div style="display:flex;flex-direction:column;gap:8px;font-size:16px;text-align:right">
<div>Ground in front of you · Karnataka chillies</div>
<div>Visit the store or call to order</div>
</div>
</footer>
</div>
</x-dc>
<script type="text/x-dc" data-dc-script="" data-props="{"price100":{"editor":"int","default":60,"tsType":"number","section":"Prices (₹)"},"price250":{"editor":"int","default":140,"tsType":"number","section":"Prices (₹)"},"price500":{"editor":"int","default":260,"tsType":"number","section":"Prices (₹)"},"priceKashmiri":{"editor":"int","default":70,"tsType":"number","section":"Prices (₹)"},"priceGuntur":{"editor":"int","default":50,"tsType":"number","section":"Prices (₹)"}}">
class Component extends DCLogic {
state = { size: '250', qty: 1, cart: {}, faq: -1, added: '', busy: '', err: '', buying: false };
bars(n) { return [1,2,3,4,5].map(i => ({ on: i <= n, off: i > n })); }
pids = {"karnataka-100": 3455, "karnataka-250": 3457, "karnataka-500": 3456, "kashmiri-100": 3399, "guntur-100": 4806};
money(n) { const v = Math.round(n * 100) / 100; return Number.isInteger(v) ? String(v) : v.toFixed(2); }
cartLines = {};
cartReady = false;
cartBoot() {
if (this._cartBoot) return;
this._cartBoot = true;
setTimeout(() => this.syncCart(), 0);
window.addEventListener('pageshow', e => { if (e.persisted) this.syncCart(); });
}
syncCart() {
fetch('/shop/cart', { credentials: 'same-origin' }).then(r => r.text()).then(h => {
const d = new DOMParser().parseFromString(h, 'text/html'), m = {};
d.querySelectorAll('input.js_quantity[data-product-id]').forEach(i => {
const p = i.getAttribute('data-product-id');
(m[p] = m[p] || []).push({ line: parseInt(i.getAttribute('data-line-id'), 10), qty: parseFloat(i.value) || 0 });
});
this.cartLines = m; this.cartReady = true; this.setState({ rev: Date.now() });
}).catch(() => { this.cartReady = true; this.setState({ rev: Date.now() }); });
}
inCart(pid) { return (this.cartLines[pid] || []).reduce((a, l) => a + l.qty, 0); }
cartPost(params) {
return fetch('/shop/cart/update_json', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-CSRFToken': (window.odoo && odoo.csrf_token) || '' },
body: JSON.stringify({ jsonrpc: '2.0', method: 'call', params })
}).then(r => r.json()).then(res => {
const o = res && res.result;
if (!o || res.error) throw new Error('cart');
if (typeof o.cart_quantity === 'number') {
document.querySelectorAll('.my_cart_quantity').forEach(el => {
el.textContent = String(o.cart_quantity);
const w = el.closest('.o_wsale_my_cart, [class*="my_cart"]');
if (w && o.cart_quantity) w.classList.remove('d-none');
});
}
return o;
});
}
step(pid, delta) {
if (!pid || this._busy) return null;
if (delta < 0 && !this.inCart(pid)) return null;
const ls = this.cartLines[pid] || [];
const t = delta > 0 ? ls[0] : ls.slice().reverse().find(l => l.qty > 0);
const params = { product_id: pid, add_qty: delta };
if (t) params.line_id = t.line;
this._busy = true;
this.setState({ busy: String(pid), err: '' });
return this.cartPost(params).then(o => {
const lid = o.line_id || (t && t.line);
let arr = (this.cartLines[pid] || []).slice();
if (lid && typeof o.quantity === 'number') {
const i = arr.findIndex(l => l.line === lid);
if (i >= 0) arr[i] = { line: lid, qty: o.quantity }; else arr.push({ line: lid, qty: o.quantity });
}
this.cartLines = { ...this.cartLines, [pid]: arr.filter(l => l.qty > 0) };
this._busy = false;
this.setState({ busy: '', added: delta > 0 ? String(pid) : '' });
clearTimeout(this._at); this._at = setTimeout(() => this.setState({ added: '' }), 1600);
return true;
}).catch(() => {
this._busy = false;
this.setState({ busy: '', err: String(pid) });
clearTimeout(this._et); this._et = setTimeout(() => this.setState({ err: '' }), 2400);
return false;
});
}
buy(pid) {
const go = () => { this.setState({ buying: true }); window.location.href = '/shop/checkout?express=1'; };
if (this.inCart(pid)) { go(); return; }
const p = this.step(pid, 1);
if (p) p.then(ok => { if (ok) go(); });
}
renderVals() {
const P = this.props;
const prices = { '100': 85.06, '250': 221.56, '500': 389.56 };
const s = this.state;
const items = Object.values(s.cart);
const mainKey = 'karnataka-' + s.size;
const pidSel = this.pids[mainKey]; const n = this.inCart(pidSel); this.cartBoot();
const range = [{"id": "karnataka", "name": "Karnataka", "note": "Very hot, deep red colour", "h": 5, "c": 4, "price": 85.06, "stamp": "Spicy", "url": "/karnataka-spicy-chilli-powder", "current": true, "href": "#buy", "linkLabel": "Choose a size of Karnataka chilli powder"}, {"id": "kashmiri", "name": "Kashmiri", "note": "Very low heat, bright red colour", "h": 1, "c": 5, "price": 199.5, "stamp": "Mild", "url": "/kashmiri-chilli-powder", "current": false, "href": "/kashmiri-chilli-powder", "linkLabel": "View Kashmiri chilli powder"}, {"id": "guntur", "name": "Guntur", "note": "Everyday heat, lighter colour", "h": 3, "c": 2, "price": 73.5, "stamp": "Hot", "url": "/guntur-chilli-powder", "current": false, "href": "/guntur-chilli-powder", "linkLabel": "View Guntur chilli powder"}].map(c => {
const key = c.id + '-100';
return { ...c, img: ({ karnataka: '/web/image/product.template/10007/image_512', kashmiri: '/web/image/product.template/9974/image_512', guntur: '/web/image/product.template/10085/image_512' })[c.id], alt: c.name + ' chilli powder', priceText: this.money(c.price), slot: 'chilli-range-' + c.id, ph: 'Drop ' + c.name + ' chilli photo', heat: this.bars(c.h), colour: this.bars(c.c),
btn: s.err === String(this.pids[key]) ? 'Retry' : s.busy === String(this.pids[key]) ? 'Adding…' : this.inCart(this.pids[key]) ? 'Add (' + this.inCart(this.pids[key]) + ' in cart)' : 'Add', add: () => this.step(this.pids[key], 1) };
});
const faqs = [["How hot is it?", "Very hot. Start with half the amount you use of a regular chilli powder. For colour with less heat, mix in some Kashmiri."], ["Is anything added?", "No. It is only dried Karnataka chillies, ground. No added colour, salt, oil or preservatives."], ["How is it tested?", "Random batches are lab-tested before they go on sale. Ask in store to see the latest report."], ["Is the stem removed from the chillies?", "Yes. The stems are removed by machine before grinding, which takes out 70–80% of the stem before the chillies are powdered."], ["Can I watch it being ground?", "Yes. Order in store and we grind it in front of you."], ["Why does it clump?", "Because there is no anti-caking agent in it. Freshly ground chilli carries its own oil and absorbs humidity. Break it up with a dry spoon - it is a sign of what is absent."], ["How long does it keep, and how should I store it?", "Best within three to four months, in an airtight, opaque container in a cool, dark cupboard. Avoid the fridge: a cold jar taken in and out of a warm kitchen gathers moisture and the powder cakes. It stays safe longer, but the aroma fades before the colour does."], ["Can I bring my own chillies to be milled?", "No. Only Miller Stores' own chillies go through our mill, so nothing from outside can cross-contaminate what you buy."], ["What do I cook with it?", "Chammanthi, fry masalas and gravies where you want real heat. For a deep red colour without the burn, blend it with Kashmiri."], ["What is it called in other languages?", "Mulaku podi (Malayalam), Menasina pudi (Kannada), Milagai thool (Tamil), Kaaram podi (Telugu) and Lal mirch powder (Hindi)."]].map(([q, a], i) => ({ q, a, open: s.faq === i, sign: s.faq === i ? '−' : '+', toggle: () => this.setState({ faq: s.faq === i ? -1 : i }) }));
return {
cartCount: items.reduce((a, b) => a + b.n, 0),
cartTotal: items.reduce((a, b) => a + b.n * b.price, 0),
heroHeat: this.bars(5), heroColour: this.bars(4),
sizes: ['100', '250', '500'].map(z => ({ label: z + ' g', price: this.money(prices[z]), active: s.size === z, inactive: s.size !== z, pick: () => this.setState({ size: z }) })),
qty: this.cartReady ? n : '–',
inc: () => this.step(pidSel, 1),
dec: () => this.step(pidSel, -1),
addMain: () => n ? (window.location.href = '/shop/cart') : this.step(pidSel, 1),
buyNow: () => this.buy(pidSel),
buyLabel: s.buying ? 'Going to checkout…' : 'Buy now',
addLabel: this.state.err === String(pidSel) ? 'Could not update cart. Try again' : this.state.busy === String(pidSel) ? 'Updating…' : n ? 'View cart (' + n + ')' : 'Add to cart · ₹' + this.money(prices[s.size]),
compare: [{"k": "Colour from", "us": "The chilli itself", "them": "Often boosted with added colour"}, {"k": "Preservatives", "us": "None", "them": "Sometimes added"}, {"k": "Where it’s ground", "us": "In front of you", "them": "Out of sight, months earlier"}, {"k": "Sourcing", "us": "Direct from Karnataka farmers", "them": "Through traders, mixed origins"}, {"k": "Testing", "us": "Random batch lab testing", "them": "Rarely shared"}, {"k": "Heat", "us": "Very hot, consistent", "them": "Varies pack to pack"}],
range, faqs
};
}
}
</script>
</div></template><script>(function(){
if (window.__lpBoot) return; window.__lpBoot = true;
if (/enable_editor|edit_translations/.test(location.search) || document.body.classList.contains('editor_enable')) return;
/* without __resources the runtime re-fetches this page and mounts the FIRST <x-dc> (mobile) */
window.__resources = window.__resources || {};
var mq = window.matchMedia('(min-width: 992px)');
if (mq.matches) {
var host = document.getElementById('lp-host'), tpl = document.getElementById('lp-desk-tpl');
if (host && tpl) { host.innerHTML = ''; host.appendChild(document.importNode(tpl.content, true)); }
}
var list = ["/web/content/37415", "/web/content/37416", "/web/content/37413", "/web/content/37414"], i = 0;
(function next(){
if (i >= list.length) return;
var s = document.createElement('script'); s.src = list[i++]; s.async = false;
s.onload = next; document.head.appendChild(s);
})();
var was = mq.matches;
var flip = function(){ if (mq.matches !== was) location.reload(); };
if (mq.addEventListener) mq.addEventListener('change', flip); else if (mq.addListener) mq.addListener(flip);
})();</script><div class="oe_structure" id="oe_structure_lp_bottom"></div>