// About, Ingredients/Science, Journal, Contact function AboutPage({ vp, goto }) { const isMobile = vp === 'mobile'; return (
{/* HERO */}
Our story · est. 1962

Three generations,
one fire, no shortcuts.

In 1962, our grandfather N. K. Achuthan started cooking chyawanprash for his village in Kasaragod because the nearest pharmacy was a four-hour bus ride.

Sixty-two years later, three vaidyas, two daughters, four grandchildren and an inconveniently slow wood fire later — we still cook the same recipe in the same kitchen, just for considerably more people. We have resisted every shortcut, every plant expansion, every offer to "modernize". This is the result.

{/* HERO IMAGE */}
NK Herbal generations
{/* TIMELINE */}

Sixty-two years, briefly.

{[ ['1962', 'Achuthan ji starts cooking', 'The first batch — 18 jars — is given away to neighbours during the monsoon.'], ['1981', 'The kitchen moves to the riverside plot', 'Still 18 jars at a time, now twice a week. Fire pit becomes permanent.'], ['1996', 'Second generation takes the spoon', 'Daughter Lakshmi standardises the 21-day cooking calendar and starts the batch log we still keep.'], ['2008', 'AYUSH certification, on our terms', 'We refuse expansion offers four times. Get certified without changing a thing.'], ['2019', 'Third generation, first website', 'Grandson Arun launches nkherbal.com. The kitchen stays exactly the same.'], ['2026', 'You are here', 'Same recipe, same fire, sixty-two thousand jars a year. This redesign is the only thing that has gotten faster.'], ].map(([y, t, d]) => (
{y}

{t}

{d}

))}
{/* PRINCIPLES */}
Six things we do not do

The shortcuts we refused.

{[ ['No pressure cookers', 'Slow open-fire cook for 21 days. Always.'], ['No artificial sweetener', 'Jaggery, honey, or whole dates. Nothing else.'], ['No glycerine or thickeners', 'If the paste is thin one month, that is amla telling us about the monsoon.'], ['No flavor masking', 'Bitter is information. We let it through.'], ['No third-party manufacturing', 'One kitchen. One fire. One batch register.'], ['No discount events', 'The price is the price. The honesty is in the recipe.'], ].map(([t, d]) => (

{t}

{d}

))}
{/* TEAM */}

The people at the spoon.

{[ ['Lakshmi NK', 'Master vaidya', '46 years'], ['Arun NK', 'Director, third gen', '12 years'], ['Dr. Meera S.', 'Lead Ayurvedic practitioner', '22 years'], ['Ramesh P.', 'Master cook, fire-keeper', '31 years'], ].map(([n, r, y]) => (
{n}
{n}
{r}
{y}
))}
{/* CLOSING CTA */}

Visit the kitchen.

We host four small open-kitchen tours a year. Three days. Twelve guests. Lunch on the floor.

); }; // ============ INGREDIENTS ============ function IngredientsPage({ vp, goto }) { const isMobile = vp === 'mobile'; return (
The herb shelf · 47 ingredients

Every herb,
by name and farm.

Nothing on the label that is not in the jar. Nothing in the jar that we cannot trace back to a farm, a vaidya's hand, and a harvest week.

{/* INGREDIENT GRID — alphabetized cards */}
{window.HERO_INGREDIENTS.map(h => (
{h.img ? {h.name} :
{h.name}
}

{h.name}

{h.role.split(',')[0]}
{h.latin}

{h.note}

))}
{/* SCIENCE STRIP */}
Lab-tested · every batch

We publish the lab work.

Each batch number on the jar links to a one-page report — heavy-metal panel, microbiology, vitamin-C retention after the slow cook, and a photograph of the lot.

{[ ['<0.1 ppm', 'Heavy metals (Pb)', 'AYUSH limit: 10 ppm'], ['<10 cfu', 'Total bacteria', 'per gram'], ['78 mg', 'Vit C retention', 'per teaspoon, post-cook'], ['100%', 'Batches tested', 'no exceptions'], ].map(([n, l, s]) => (
{n}
{l}
{s}
))}
{/* SOURCING MAP */}
Where it grows

From farm to spoon.

NK Herbal sourcing farm
{[ ['Pratapgarh, UP', 'Amla orchards · 2,400 trees · 4 farming families'], ['Kashmir Valley', 'Saffron from Pampore co-op · 92 growers'], ['Wayanad, Kerala', 'Pippali, brahmi · regenerative farms'], ['Pithoragarh, UK', 'Wild ashwagandha, shilajit · 14,000ft'], ].map(([p, d]) => (
{p}
{d}
))}
); }; // ============ JOURNAL ============ function JournalPage({ vp, goto }) { const isMobile = vp === 'mobile'; const all = [...window.JOURNAL, ...window.JOURNAL.map(j => ({ ...j, id: j.id + 'b' }))]; const [cat, setCat] = React.useState('All'); const cats = ['All', 'Science', 'Ritual', 'Sourcing', 'Recipes']; return (
The journal · slow reading

Notes from the kitchen.

A monthly letter on sourcing, science, and ritual. Written by the people who make the paste. Edited by no one in marketing.

{/* Featured */}
{}} style={{ cursor: 'pointer', display: 'grid', gridTemplateColumns: isMobile ? '1fr' : '1.3fr 1fr', gap: 40, marginBottom: 64, padding: 24, background: 'var(--surface)', borderRadius: 16, alignItems: 'center' }}>
{all[0].cat} · featured
Featured {all[0].read}

{all[0].title}

{all[0].excerpt}

{/* Filter strip */}
{cats.map(c => ( ))}
{/* grid */}
{all.filter(j => cat === 'All' || j.cat === cat).map(j => (
{j.cat}
{j.cat} {j.read}

{j.title}

{j.excerpt}

))}
{/* Newsletter */}

One letter, once a month.

Sourcing diaries, quiet recipes, the occasional discount. No tracking pixels.

); }; // ============ CONTACT ============ function ContactPage({ vp }) { const isMobile = vp === 'mobile'; const [sent, setSent] = React.useState(false); const [topic, setTopic] = React.useState('An order or delivery'); const [topicOpen, setTopicOpen] = React.useState(false); const [newsletter, setNewsletter] = React.useState(true); const topics = ['An order or delivery','A product question','A vaidya consultation','A kitchen visit','Wholesale or press','Something else']; return (
Get in touch

Write us a letter.

Real people, in Kasaragod and Bengaluru. We read everything within 24 hours and reply within 48.

Or fill the form

{sent ? (

Letter received.

We'll write back within 48 hours. If you mentioned the kitchen visit, expect an invitation in the next batch round.

) : (
{ e.preventDefault(); setSent(true); }} className="col gap-4">
{topicOpen && (
{topics.map(t => ( ))}
)}
)}
); }; window.AboutPage = AboutPage; window.IngredientsPage = IngredientsPage; window.JournalPage = JournalPage; window.ContactPage = ContactPage;