Sign in

Create account

Choose Theme

About Us

We build concise culinary courses that teach skills, not distractions. Every lesson focuses on execution, clarity, and results.

No stock photos. No filler. Just step-by-step progress you can taste.

Back to Home

Our Principles

Milestones opened

0/0

Founding vision

A minimalist approach to culinary education with chef-designed curricula.

Link to this milestone
First curriculum shipped

Knife skills and heat control formed the backbone of our learning path.

Link to this milestone
Platform-wide accessibility upgrade

Improved contrast, keyboard navigation, and semantic structure.

Link to this milestone
Global conversions and measurements

Introduced universal conversion guides and metric-first recipes.

Link to this milestone
Community feedback loop

Added structured feedback after each module to drive curriculum updates.

Link to this milestone

Commitment to learners

We iterate based on real learner feedback. Your progress is our roadmap.

Jump to Timeline
'), fetch('./footer.html', {cache:'no-store'}).then(r=>r.text()).catch(()=>'') ]); document.querySelector('header').innerHTML = h; document.querySelector('footer').innerHTML = f; initHeaderInteractions(); initFooterInteractions(); } catch(e) { console.error('Failed to load partials', e); } } function initHeaderInteractions(){ const root = document.querySelector('header'); root?.addEventListener('click',(e)=>{ const t = e.target; const open = t.closest && t.closest('[data-open-modal]'); const close = t.closest && t.closest('[data-close-modal]'); if (open) { e.preventDefault(); const id = open.getAttribute('data-open-modal'); const el = document.getElementById(id); if (el && el.showModal) el.showModal(); } if (close) { e.preventDefault(); const id = close.getAttribute('data-close-modal'); const el = document.getElementById(id); if (el && el.close) el.close(); } const themeToggle = t.closest && t.closest('[data-toggle-theme]'); if (themeToggle) { e.preventDefault(); const current = localStorage.getItem('theme') || (document.documentElement.classList.contains('dark')?'dark':'light'); const next = current === 'dark' ? 'light' : 'dark'; localStorage.setItem('theme', next); document.documentElement.classList.toggle('dark', next === 'dark'); } }); const theme = localStorage.getItem('theme') || 'light'; document.documentElement.classList.toggle('dark', theme==='dark'); } function initFooterInteractions(){ const bar = document.getElementById('cookie-bar'); if (!bar) return; if (localStorage.getItem('cookieConsent')==='accepted') bar.classList.add('hidden'); bar.addEventListener('click',(e)=>{ const t = e.target; if(t.matches && t.matches('[data-accept-cookies]')) { localStorage.setItem('cookieConsent','accepted'); bar.classList.add('hidden'); } if(t.matches && t.matches('[data-decline-cookies]')) { localStorage.setItem('cookieConsent','declined'); bar.classList.add('hidden'); } }); } function initTimelineInteractions(){ const timeline = document.querySelector('[data-timeline]'); if(!timeline) return; const detailsList = Array.from(timeline.querySelectorAll('details')); const expandAll = timeline.querySelector('[data-expand-all]'); const collapseAll = timeline.querySelector('[data-collapse-all]'); const bar = document.getElementById('timeline-progress'); const count = document.getElementById('timeline-count'); const live = document.getElementById('timeline-live'); function saveState() { const openIds = detailsList.filter(d=>d.open).map(d=>d.id).filter(Boolean); try { localStorage.setItem('aboutTimelineOpen', JSON.stringify(openIds)); } catch(e){} } function restoreState() { let openIds = []; try { openIds = JSON.parse(localStorage.getItem('aboutTimelineOpen') || '[]'); if(!Array.isArray(openIds)) openIds = []; } catch(e){ openIds = []; } detailsList.forEach(d=>{ d.open = openIds.includes(d.id); }); } function updateProgress() { const total = detailsList.length; const opened = detailsList.filter(d=>d.open).length; const pct = total ? Math.round(opened/total*100) : 0; if (bar) bar.style.width = pct + '%'; if (count) count.textContent = opened + '/' + total; if (live) live.textContent = 'Timeline progress: ' + opened + ' of ' + total + ' milestones open.'; } function openAll() { detailsList.forEach(d=>d.open = true); saveState(); updateProgress(); } function closeAll() { detailsList.forEach(d=>d.open = false); saveState(); updateProgress(); } function openHashTarget() { const id = decodeURIComponent(location.hash.replace('#','')); if (!id) return; const target = document.getElementById(id); if (target && target.tagName.toLowerCase() === 'details') { target.open = true; saveState(); updateProgress(); target.scrollIntoView({behavior:'smooth', block:'start'}); } } restoreState(); updateProgress(); detailsList.forEach(d=>{ d.addEventListener('toggle', ()=>{ saveState(); updateProgress(); }); }); if (expandAll) expandAll.addEventListener('click', (e)=>{ e.preventDefault(); openAll(); }); if (collapseAll) collapseAll.addEventListener('click', (e)=>{ e.preventDefault(); closeAll(); }); window.addEventListener('hashchange', openHashTarget); openHashTarget(); try { localStorage.setItem('aboutLastVisit', new Date().toISOString()); } catch(e){} } document.addEventListener('DOMContentLoaded', ()=>{ loadPartials(); initTimelineInteractions(); });